2016-04-25 9 views
2

JSONデータの変換方法input.jsonoutput.json Pythonを使用していますか?一般に、JSONデータのフィルタリングにはどのようなデータ構造が使用されていますか?Pythonを使用してJSONデータをフィルタリングする方法は?

ファイル:

[ 
{ 
    "id":1, 
    "a":22, 
    "b":11 
}, 
{ 
    "id":1, 
    "e":44, 
    "c":77, 
    "f":55, 
    "d":66 
}, 
{ 
    "id":3, 
    "b":11, 
    "a":22 
}, 
{ 
    "id":3, 
    "d":44, 
    "c":88 
} 
] 
input.json

ファイル:

[ 
{ 
    "id":1, 
    "a":22, 
    "b":11, 
    "e":44, 
    "c":77, 
    "f":55, 
    "d":66 
}, 
{ 
    "id":3, 
    "b":11, 
    "a":22, 
    "d":44, 
    "c":88 
} 
] 

output.json任意のポインタをいただければ幸いです!

+0

あなたは辞書をと考えていますか? :D – Adib

答えて

3

アイデアはにある:

  • collections.defaultdictを使用して、idでデータを再グループ化
  • ファイルからPythonのリストにJSONコンテンツをロードするために使用json.load().update()方法
  • ダンプするのに使用json.dump()結果はJSONファイル

実装:

import json 
from collections import defaultdict 

# read JSON data 
with open("input.json") as input_file: 
    old_data = json.load(input_file) 

# regroup data 
d = defaultdict(dict) 
for item in old_data: 
    d[item["id"]].update(item) 

# write JSON data 
with open("output.json", "w") as output_file: 
    json.dump(list(d.values()), output_file, indent=4) 

output.jsonが含まれます

[ 
    { 
     "d": 66, 
     "e": 44, 
     "a": 22, 
     "b": 11, 
     "c": 77, 
     "id": 1, 
     "f": 55 
    }, 
    { 
     "b": 11, 
     "id": 3, 
     "d": 44, 
     "c": 88, 
     "a": 22 
    } 
] 
3
from collections import defaultdict 

input_list=[{"id":1, ...}, {...}] 

result_dict=defaultdict(dict) 
for d in input_list: 
    result_dict[d['id']].update(d) 

output_list=result_dict.values() 

result_dict可能なキーなしで、すべてのアクセスのためのdictを使用していますdefault dictionaryです。したがって、input_listを繰り返し、result_dictをkey equals idで更新し、対応する辞書の新しい値を更新します。

出力リストはresult_dictの変換で、その値のみを使用します。

json moduleを使用してjsonデータを直接操作します。

関連する問題