2017-04-17 88 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迭代。