2017-09-09 5 views
0

かなり大きなJSONファイルがあります。それぞれには、1つの配列内に数千ものオブジェクトが含まれています。 JSONsは、次の形式で構成されています。配列内の各オブジェクトに一意の値を見つけ、JSONファイルを検索するPythonとJSONライブラリを使用して、どのように多く数えるための最も効率的な方法を何Pythonで大きなJSONファイル内のオブジェクト内のユニークな値をカウントする

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

彼らが現れる時間?たとえば、配列の「field3」オブジェクトで値「xyz」を検索し、何回出現するかを数えます。私はStackOverflowの既存のソリューションに基づいていくつかのバリエーションを試しましたが、私が探している結果を提供していません。

答えて

0

はは、PyPI上のクイック検索は2.3 ijson

で反復JSONパーサーを

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) 

サンプルデータをで実行してくださいはあなたの入力でnullは「ヌル」文字列に変換されたことが

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

注意を生成します。

比較の点として、ここでtostream

jq -M ' 
    reduce (tostream|select(length==2)) as [$p,$v] (
     {} 
    ; ($p[2:]+[$v|tostring]) as $k 
    | setpath($k; getpath($k)+1) 
    ) 
' data.json 
を使用して同等の結果を生成 jqコマンドである
関連する問題