我希望在字符串中读取 {"a": 1.0} 通用Java对象,同时保持相同的字符串格式.但是,当我尝试时,杰克逊自动将内部表示更改为{a = 1}.换句话说,如何才能打印以下代码{"a": 1.0}而不是{a = 1}?请注意,我必须将其读作Object(由于其他程序限制).
import org.codehaus.jackson.map.ObjectMapper;
public class Main {
public static void main(String[] args) {
try
{
ObjectMapper mapper = new ObjectMapper();
Object myObject = mapper.readValue("{\"a\": 1.0}", Object.class);
System.out.println(myObject.toString());
}
catch (Exception e)
{
e.printStackTrace();
System.err.println(e.getMessage());
}
}
}
Run Code Online (Sandbox Code Playgroud)
创建的对象将是一个地图(就像其他注释一样),因此它toString会产生您所看到的内容{a = 1}.要让代码打印出更接近输入值的代码,您需要使用Jackson将其写回来,例如:
System.out.println(mapper.writeValueAsString(myObject));
Run Code Online (Sandbox Code Playgroud)
这给了我相信你正在寻找的东西:
{"a":1.0}
Run Code Online (Sandbox Code Playgroud)
换句话说,Jackson已将您的输入字符串反序列化为任意Java对象.当您调用toString该对象时,toString当然会使用它自己的对象.这可以写好对象,包括使用方法Object.要重现输入字符串,您必须使用Jackson来序列化我们的对象.
您需要一个与所需 json 结构匹配的现有类。对象不是这样的类。Object如果需要,您仍然可以将其称为:
Object myObject = mapper.readValue("{\"a\": 1.0}", SomeClass.class);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14449 次 |
| 最近记录: |