2017-04-17 89 views
2

我現在有一個JSON文件看起來像這樣....Python的解析多個JSON對象到一個對象

{ 
    "data": [ 
    { 
     "tag": "cashandequivalents", 
     "value": 10027000000.0 
    }, 
    { 
     "tag": "shortterminvestments", 
     "value": 101000000.0 
    }, 
    { 
     "tag": "accountsreceivable", 
     "value": 4635000000.0 
    }, 
    { 
     "tag": "netinventory", 
     "value": 1386000000.0 
    }... 

但我想獲得的就是這種

{ 
    "cashandequivalents": 10027000000.0, 
    "shortterminvestments":101000000.0 , 
    "accountsreceivable":4635000000.0, 
    "netinventory":1386000000.0 
} 

我只是不知道如何去做這件事。


也許還有一個更簡單的方法,但因爲下一個步驟是writer.writerow到csv

所以最終CSV看起來像

cashandequivalents | shortterminvestments | accountsreceivable | netinventory 
100027000000   101000000000   46350000000   13860000000 
###########   ############   ###########   ........... 

這似乎是最合乎邏輯的我(writer.writeheader將在循環之外完成,所以我只寫入數值,而不是「標籤」)

謝謝

+1

'combined = {item ['tag']:item ['value'] for ['data']}'其中'a'是您的初始結構。這是一個詞典理解。 – roganjosh

回答

3

一個天真的解決方案:

import json 

json_data = { 
    "data": [ 
     { 
      "tag": "cashandequivalents", 
      "value": 10027000000.0 
     }, 
     { 
      "tag": "shortterminvestments", 
      "value": 101000000.0 
     }, 
     { 
      "tag": "accountsreceivable", 
      "value": 4635000000.0 
     }, 
     { 
      "tag": "netinventory", 
      "value": 1386000000.0 
     } 
    ] 
} 

result = dict() 
for entry in json_data['data']: 
    result[entry['tag']] = entry['value'] 

print json.dumps(result, indent=4) 

輸出

{ 
    "shortterminvestments": 101000000.0, 
    "netinventory": 1386000000.0, 
    "accountsreceivable": 4635000000.0, 
    "cashandequivalents": 10027000000.0 
} 
1

要做到這一點,最簡單和最徹底的方法是一個字典解析。

d = { 
"data": [ 
    { 
    "tag": "cashandequivalents", 
    "value": 10027000000.0 
    }, 
    { 
    "tag": "shortterminvestments", 
    "value": 101000000.0 
    }, 
    { 
    "tag": "accountsreceivable", 
    "value": 4635000000.0 
    }, 
    { 
    "tag": "netinventory", 
    "value": 1386000000.0 
    } 
] 
} 
newDict = {i['tag']: i['value'] for i in d['data']} 

# {'netinventory': 1386000000.0, 'shortterminvestments': 101000000.0, 'accountsreceivable': 4635000000.0, 'cashandequivalents': 10027000000.0} 

所包含您的原始dictionary"data"鍵內的鍵是每個tag數值,並在值作爲value爲每創建一個新的內聯這迭代通過list迭代。