【发布时间】:2017-04-02 00:00:09
【问题描述】:
我正在使用Jackson Fasterxml 2.8.0版对json进行序列化和反序列化,如下:
public static byte[] serializeData(Object object){
final ObjectMapper mapper = new ObjectMapper();
return mapper.writeValueAsBytes(object);
}
public static void main(String [] args) {
String json = "{ \"id\" : \"user1\" }"; // need to escape or else compiler complains
byte[] result = serializeData(json);
final ObjectMapper mapper = new ObjectMapper();
final JsonNode jsonNode = mapper.readTree(result);
System.out.println(json);
System.out.println(jsonNode.toString());
System.out.println(jsonNode.getNodeType());
Iterator<String> fields = jsonNode.fieldNames();
while(fields.hasNext()){
System.out.println("field - " + fields.next());
}
}
输出是:
{ "id" : "user1" }
"{ \"id\" : \"user1\" }"
STRING
请注意,没有用于打印字段名称的输出行。因此,JsonNode 似乎没有任何属性,并且由于某种原因,toString() 在其中包含转义字符。我是否以错误的方式使用这个库?为什么在反序列化字节数组时会导致我找不到最初添加的字段的行为?
更新
提供应用程序的更多上下文。应用程序接收 Json 作为字符串输入。反序列化 Json 的代码不知道 Json 的模型。它只是期望它是有效的 Json 对象,以便它可以遍历其中的各个字段。
【问题讨论】: