用数组反序列化json

时间:2012-04-04 19:06:11

标签: json jackson

我正在使用jackson反序列化一些Json。我正在阅读一个大型的json文档并拔出块并告诉jackson将该块取出并将其反序列化为我在java中创建的对象(实际上是嵌套数组中的几个对象)以匹配json。

用于反序列化的代码是

fooObject newFoo = mapper.readValue(newNode,fooObject.class);

问题是块中有一个值,有时是哈希,例如

addWidgetStrategy={"get":2,"spend":6,"textLabel":"bikes"}

有时是一个数组

addWidgetStrategy=[{"get":1.5,"spend":3,"textLabel":"thursday"},{"get":3,"spend":5,"textLabel":"tuesday"}]

所以在fooObject中我需要处理addWidgetStrategy,它有自己的对象。如果在fooObject中我放了

public addWidgetStrategy addWidgetStrategy;

上述工作直到它试图反序列化数组

如果我把

public List<addWidgetStrategy>  addWidgetStrategy;

它只适用于数组,并且当它只是一个哈希

时就会爆炸

如何解析相同的Json元素addWidgetStrategy,无论它是数组还是单个哈希?

1 个答案:

答案 0 :(得分:2)

对于数组,它应该是:

   fooObject[] newFoo = mapper.readValue(newNode,fooObject[].class);

你可以这样读:

   JsonNode jsonNode = mapper.readTree(json);
   if (jsonNode.isArray()) {
       fooObject[] newFoo = mapper.readValue(jsonNode,fooObject[].class);
       ...
   } else {
       fooObject newFoo = mapper.readValue(jsonNode,fooObject.class);  
       ....
   }