使用Python

时间:2017-09-09 02:11:45

标签: json python-2.7

我有一些相当大的JSON文件。每个包含一(1)个数组中的数千个对象。 JSON的结构格式如下:

{
    "alert": [
    { "field1": "abc",
    "field2": "def",
    "field3": "xyz
},
{ "field1": null,
"field2": null,
"field3": "xyz",
},
...
...
]

使用Python和json库搜索JSON文件的最有效方法是什么,在数组中的每个对象中查找唯一值,并计算它们出现的次数?例如,在数组的“field3”对象中搜索值“xyz”并计算它出现的次数。我根据StackOverflow中的现有解决方案尝试了一些变体,但它们没有提供我正在寻找的结果。

1 个答案:

答案 0 :(得分:0)

快速搜索PyPI

  • ijson 2.3 - 具有标准Python迭代器接口的迭代JSON解析器 click here

这是一个适用于您的数据的示例

import ijson

counts = {}
with file("data.json") as f:
    objects = ijson.items(f, 'alert.item')
    for o in objects:
        for k, v in o.items():
            field = counts.get(k,{})
            total = field.get(v,0)
            field[v] = total + 1
            counts[k] = field

import json
print json.dumps(counts, indent=2)

使用data.json中的示例数据生成

{
  "field2": {
    "null": 1, 
    "def": 1
  }, 
  "field3": {
    "xyz": 2
  }, 
  "field1": {
    "null": 1, 
    "abc": 1
  }
}

但请注意,输入中的null已转换为字符串" null"。

作为比较点,这是一个https://pypi.python.org/pypi/ijson命令,它使用tostream

产生等效结果
 jq -M '
    reduce (tostream|select(length==2)) as [$p,$v] (
      {}
    ; ($p[2:]+[$v|tostring]) as $k
    | setpath($k; getpath($k)+1)
    )
' data.json