【发布时间】:2019-05-06 13:49:02
【问题描述】:
我有两个 json 文件,如下所示。我想找到两者之间的差异并将差异写入第三个json文件。 我期望应该计算 json diff-(B.json-A.json)
A.json
[{
"Number": 123,
"brand": "Ford",
"model": {
"Mustang1": "2.64",
"Mustang2": "3.00",
"Mustang3": "1.00",
"Mustang4": "1.64"
}
},
{
"Number": 321,
"brand": "Toyota",
"model": {
"Camry": "2.64",
"Prius": "3.00",
"Corolla": "1.00",
"Tundra": "1.64"
}
},
{
"Number": 111,
"brand": "Honda",
"model": {
"Accord": "2.64",
"Civic": "3.00",
"Insight": "1.00",
"Pilot": "1.64"
}
},
{
"Number": 891,
"brand": "Ford",
"model": {
"Mustang1": "2.64",
"Mustang8": "3.00",
"Mustang3": "1.00",
"Mustang6": "1.64"
}
},
{
"Number": 745,
"brand": "Toyota",
"model": {
"Camry": "2.64",
"Sienna": "3.00",
"4Runner": "1.00",
"Prius": "1.64"
}
},
{
"Number": 325,
"brand": "Honda",
"model": {
"Accord": "2.64",
"Passport": "3.00",
"HR-V": "1.00",
"Pilot": "1.64"
}
},
{
"Number": 745,
"brand": "Accura",
"model": {
"TLX": "2.64",
"MDX": "3.00"
}
},
{
"Number": 325,
"brand": "Accura",
"model": {
"TLX": "2.64",
"MDX": "3.00"
}
}
]
B.json
[{
"Number": 123,
"brand": "Ford",
"model": {
"Mustang1": "2.64",
"Mustang2": "3.00",
"Mustang5": "1.64"
}
},
{
"Number": 321,
"brand": "Toyota",
"model": {
"Camry": "2.64",
"Prius1": "3.00",
"Corolla1": "1.00",
"Tundra": "1.64"
}
},
{
"Number": 111,
"brand": "Honda",
"model": {
"Accord1": "2.64",
"Civic1": "3.00",
"Insight": "1.00",
"Pilot": "1.64"
}
},
{
"Number": 891,
"brand": "Ford",
"model": {
"Mustang1": "2.64",
"Mustang8": "3.00",
"Mustang3": "1.00",
"Mustang6": "1.64"
}
},
{
"Number": 745,
"brand": "Toyota",
"model": {
"Camry2": "2.64",
"Sienna2": "3.00",
"4Runner": "1.00",
"Prius": "1.64"
}
},
{
"Number": 325,
"brand": "Honda",
"model": {
"Accord": "2.64",
"Passport2": "3.00",
"HR-V2": "1.00",
"Pilot": "1.64"
}
},
{
"Number": 745,
"brand": "Accura",
"model": {
"TLX": "2.64",
"MDX2": "3.00"
}
},
{
"Number": 325,
"brand": "Accura",
"model": {
"TLX1": "2.64",
"MDX": "3.00"
}
}
]
打印出来:
{0: {'model': {'$delete': ['Mustang3', 'Mustang4'],
'Mustang2': '1.00',
'Mustang5': '1.64'}},
1: {'model': {'$delete': ['Prius', 'Corolla'],
'Corolla1': '1.00',
'Prius1': '3.00'}},
2: {'model': {'$delete': ['Accord', 'Civic'],
'Accord1': '2.64',
'Civic1': '3.00'}},
4: {'model': {'$delete': ['Camry', 'Sienna'],
'Camry2': '2.64',
'Sienna2': '3.00'}},
5: {'model': {'$delete': ['Passport', 'HR-V'],
'HR-V2': '1.00',
'Passport2': '3.00'}},
6: {'model': {'$delete': ['MDX'], 'MDX2': '3.00'}},
7: {'model': {'$delete': ['TLX'], 'TLX1': '2.64'}}}
预期结果:根据B.json-A.json计算。它将检查 A.json 中模型中存在但 B.json 中不存在的所有键 - 按其他键分组 - 编号、品牌。
{"Number": 123, "brand": "Ford", 'model': {'Mustang2': '1.00', 'Mustang5': '1.64'}},
{"Number": 321, "brand": "Toyota", 'model': {'Corolla1': '1.00', 'Prius1': '3.00'}},
{"Number": 111, "brand": "Honda", 'model': {'Accord1': '2.64', 'Civic1': '3.00'}},
{"Number": 745, "brand": "Toyota", 'model': {'Camry2': '2.64', 'Sienna2': '3.00'}},
{"Number": 325, "brand": "Honda", 'model': {'HR-V2': '1.00', 'Passport2': '3.00'}},
{"Number": 745, "brand": "Accura", 'model': {'MDX2': '3.00'}},
{"Number": 325, "brand": "Accura", 'model': {'TLX1': '2.64'}}}
【问题讨论】:
-
是的,A.json 和 B.json - 是有效的 json 文件。
-
您可以使用https://jsonlint.com/ 进行检查。
-
@interjay 显然这些是“json-per-line”文件。
-
a_li 和 b_li 都包含相同的 json 对象!也许您需要编辑您的问题@user15051990
-
是的,Mustang 2 在 B.json 中看起来应该是 Mustang 3
标签: python json python-3.x