0

我在磁盘上有一个非常大的 .json 文件。我想使用 Jackson 解析器将其实例化为 Java 对象。

该文件如下所示:

[ { "prop1": "some_value",
    "prop2": "some_other_value",
    "something_random": [
      // ... arbitrary list of objects containing key/value 
      //     pairs of differing amounts and types ...
    ]
  },
  // ... repated many times ...
  {
  }
]

基本上它是一个很大的对象数组,每个对象都有两个标识它的字符串属性,然后是另一个内部对象数组,其中每个对象是属性和值的随机集合,这些属性和值主要是字符串和整数,但也可能包含数组。

由于这种对象布局,我没有可以用来轻松实例化这些对象的集合模式。使用 org.json 处理器需要尝试为整个文件分配一个字符串,这通常由于其大小而失败。所以我想使用流解析器,但我完全不熟悉它。

最后我想要的是一个 Map,其中 String 是 prop1 的值, SomeObject 是保存整个对象数据的东西(顶级数组条目)。也许只是 JSON 可以稍后在需要时进行解析?

无论如何,欢迎有关如何为此编写代码的想法。

4

1 回答 1

3

由于您不想将整个事物绑定为单个对象,因此您可能希望readValues()使用ObjectReader. 如果单个值的结构是通用的,您可能希望将它们绑定为java.util.Maps 或JsonNodes(杰克逊树模型)。所以你会做这样的事情:

ObjectMapper mapper = new ObjectMapper();
ObjectReader reader = mapper.reader(Map.class); // or JsonNode.class
MappingIterator<Map> it = reader.readValues(new File("stuff.json"));
while (it.hasNextValue()) {
   Map m = it.nextValue();
   // do something; like determine real type to use and:
   OtherType value = mapper.convertValue(OtherType.class);
}

迭代整个事情。

于 2012-06-10T01:56:02.983 回答