使用python结合基于键值的json

2024-06-16 10:15:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个JSON字符串作为示例:

json_1 = [
    {
        "breadth": 48.04,
        "vessel_id": 1, 
        "vessel_name": "SHIP-01", 
        "vessel_type": "Crude Oil Tanker", 
        "year_built": 2012
     },
     {
        "breadth": 42,
        "vessel_id": 2,
        "vessel_name": "SHIP-02",
        "vessel_type": "Crude Oil Tanker",
        "year_built": 2016
     }
]

json_2 = [
    {
        "Ballast_miles": 43575.8,
        "Ballast_miles_pct": 36.1,
        "org_id": 1,
        "port_days": 383.5,
        "sea_days": 414.9,
        "total_days": 798.4,
        "vessel_id": 1
    },
    {
        "Ballast_miles": 21642.7,
        "Ballast_miles_pct": 29.8,
        "org_id": 1, 
        "port_days": 325.7,
        "sea_days": 259.8,
        "total_days": 585.5,
        "vessel_id": 2
    }
] 

我想结合这两个基于vessel_id的JSON。你知道吗

我的输出格式应该如下所示:

[{ vesselId: 1,
 json1:{},
 json2:{}
},
{ vesselId: 2,
 json1:{},
 json2:{}
}]

到目前为止我试过的是:

data = {'First_Json': json_1, 'Second_Json': json_2}
json.dumps(data)

但是这完全结合在一起,而不需要基于vessel_id进行检查。你知道吗


Tags: nameidjsontypedaysyearoiltanker
1条回答
网友
1楼 · 发布于 2024-06-16 10:15:12

像这样的?你知道吗

json_1 = [{ "breadth": 48.04, "vessel_id": 1, "vessel_name": "SHIP-01", "vessel_type": "Crude Oil Tanker", "year_built": 2012 }, { "breadth": 42,  "vessel_id": 2, "vessel_name": "SHIP-02", "vessel_type": "Crude Oil Tanker", "year_built": 2016 }]
json_2 = [{ "Ballast_miles": 43575.8, "Ballast_miles_pct": 36.1, "org_id": 1, "port_days": 383.5, "sea_days": 414.9, "total_days": 798.4, "vessel_id": 1 }, { "Ballast_miles": 21642.7, "Ballast_miles_pct": 29.8,  "org_id": 1, "port_days": 325.7, "sea_days": 259.8, "total_days": 585.5, "vessel_id": 2 }] 

from collections import defaultdict
result = defaultdict(dict)
for item in json_1:
    result[item['vessel_id']]['json_1'] = item
for item in json_2:
    result[item['vessel_id']]['json_2'] = item

[{"vessel_id" : k,
  "json1" : v['json_1'],
  "json2" : v['json_2']}
    for k,v in result.items()]

输出:

[{'json1': {'breadth': 48.04,
   'vessel_id': 1,
   'vessel_name': 'SHIP-01',
   'vessel_type': 'Crude Oil Tanker',
   'year_built': 2012},
  'json2': {'Ballast_miles': 43575.8,
   'Ballast_miles_pct': 36.1,
   'org_id': 1,
   'port_days': 383.5,
   'sea_days': 414.9,
   'total_days': 798.4,
   'vessel_id': 1},
  'vessel_id': 1},
 {'json1': {'breadth': 42,
   'vessel_id': 2,
   'vessel_name': 'SHIP-02',
   'vessel_type': 'Crude Oil Tanker',
   'year_built': 2016},
  'json2': {'Ballast_miles': 21642.7,
   'Ballast_miles_pct': 29.8,
   'org_id': 1,
   'port_days': 325.7,
   'sea_days': 259.8,
   'total_days': 585.5,
   'vessel_id': 2},
  'vessel_id': 2}]

如果要删除冗余的vessel_id,请尝试在每个dict上使用带有del命令的for循环

相关问题 更多 >