【问题标题】:read large json file读取大型 json 文件
【发布时间】:2015-07-06 22:55:47
【问题描述】:

我有一个结构复杂的 json 文件。

{"Objects":{"items":{"item":[
{
"field1": "value1",
"field2": "value2",
"field3":[
     {
       "label1":"1",
       "label2":"2"
     },
     {
       "label1":"3",
       "label2":"4"
     }]
}
,
{
//same structure as above object
}
]}}}

文件大小略大于 1GB。我需要读取一个对象并查看特定标签的值是什么,如果它与我拥有的列表匹配,我需要将该对象写入另一个文件中,否则不是。

我知道像 JSONSimple 这样的普通 JSON 解析器无法工作,因为它将数据保存到内存中。我正在尝试使用杰克逊,但发现很难遍历所有对象,因为一次需要一个令牌。对于这种 JSON 格式,使用 Jackson 的流式传输和树结构的有效方法是什么?

或者我可以通过什么方式使用脚本来获取数据并使用它?

【问题讨论】:

  • Python 值得研究吗?
  • 我从未使用过 Python。 java有什么用吗?
  • 是的,这就是我现在用来解决问题的方法。
  • 如何遍历 item 中的所有数组元素?然后是 field3 数组?

标签: java json parsing large-files


【解决方案1】:

您可能可以多次调用 nextToken() 将 JsonParser 推进几次,直到获得 Token ID_START_ARRAY,调用 nextToken() 以移动到第一个项目对象的开头,然后将表示“项目”的解析器和 POJO 类提供给 ObjectMapper。 readValue() (https://github.com/FasterXML/jackson-databind/blob/master/src/main/java/com/fasterxml/jackson/databind/ObjectMapper.java),重复直到找不到更多对象。 POJO 可以是手写的,也可以使用 https://github.com/astav/JsonToJava/wiki/JsonToJava 之类的东西生成

或者完全跳过 Jackson - 自己编写一个小标记器,它将提取单个“项目”json 元素并将它们提供给 JSONSimple。这样,您可能会进行一些轮子改造,但会避免产生很多依赖关系。

【讨论】:

    猜你喜欢
    • 2018-08-23
    • 2023-04-05
    • 2014-05-19
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    相关资源
    最近更新 更多