我有一些相当大的JSON文件。每个包含一(1)个数组中的数千个对象。 JSON的结构格式如下:
{
"alert": [
{ "field1": "abc",
"field2": "def",
"field3": "xyz
},
{ "field1": null,
"field2": null,
"field3": "xyz",
},
...
...
]
使用Python和json库搜索JSON文件的最有效方法是什么,在数组中的每个对象中查找唯一值,并计算它们出现的次数?例如,在数组的“field3”对象中搜索值“xyz”并计算它出现的次数。我根据StackOverflow中的现有解决方案尝试了一些变体,但它们没有提供我正在寻找的结果。
答案 0 :(得分:0)
快速搜索PyPI
这是一个适用于您的数据的示例
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