【问题标题】:Python Parsing multiple JSON objects into one objectPython将多个JSON对象解析为一个对象
【发布时间】:2017-09-13 09:07:14
【问题描述】:

我目前有一个看起来像这样的 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 将在循环之外完成,所以我只写值,而不是“标签”)

谢谢

【问题讨论】:

  • combined = {item['tag']: item['value'] for item in a['data']} 其中a 是您的初始结构。这是字典理解。

标签: python json csv


【解决方案1】:

一个简单的解决方案:

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
}

【讨论】:

    【解决方案2】:

    最简单、最简洁的方法是使用字典理解。

    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" 键中的 list 并创建一个新的内联键,键是每个的 tag 值,值是 value在迭代期间为每个。

    【讨论】:

      猜你喜欢
      • 2021-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多