比较两个json文件中的差异并找出差异

2024-06-26 13:22:49 发布

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

我试图比较两个json文件之间的差异,并输出文件a中存在但文件b中不存在的r_id值列表

我正在尝试比较的Json文件

文件a=

   {“r_id”:”123”,"RefNumber”:”2341234131","amount":"22.99”},
   {“r_id”:”345”,"RefNumber”:”2341234131","amount":"22.99”},
   {“r_id”:”678”,"RefNumber”:”2341234131","amount":"22.99”}

文件b=

     {“name” : “James”, "id" : “123”, “class” : “1A”},
     {“name” : “Sam”,"id" : “345”, “class” : “1A”},
     {“name” : “Jen”,"id" : “005”, “class” : “1A”}

比较应基于两个文件中的id。在差异文件中需要以下输出

{“r_id”:”678”,"RefNumber”:”2341234131","amount":"22.99”}

Tags: 文件nameidjson列表sam差异amount
2条回答

如果ID不符合顺序并且JSON没有相同的项,这将起作用

import json

with open("json_a.json","r") as first, open("json_b.json","r") as second :
  b =  json.load(first,object_pairs_hook=lambda x: x[0])
  c =  json.load(second,object_pairs_hook=lambda x: x[1])

b = [ _[1] for _ in b]
c = [ _[1] for _ in c]

with open("json_a.json","r") as first:
  for each_line in json.load(first):
    for uniq_id in list(set(b).difference(c)):
      if each_line['r_id']== uniq_id :
        print(each_line)

另一种方法:

import json

with open("json_a.json","r") as first, open("json_b.json","r") as second :
  b =  json.load(first)
  c =  json.load(second)

b_ids=[x['r_id'] for x in b]

c_ids=[x['id'] for x in c]

for each_item in b:
  for uniq_id in list(set(b_ids).difference(c_ids)):
    if each_item['r_id'] == uniq_id:
      print(each_item)

写入文件:

# Serializing json
json_object = json.dumps(each_item)

# Writing to sample.json 
with open("sample.json", "w") as outfile: 
    outfile.write(json_object)

有关文件写入选项的更多详细信息,请参见here

请尝试以下代码:

import json

a = ['{"r_id":"123","RefNumber":"2341234131","amount":"22.99"}',
     '{"r_id":"345","RefNumber":"2341234131","amount":"22.99"}',
     '{"r_id":"678","RefNumber":"2341234131","amount":"22.99"}'
   ]


b = [ '{"name" : "James", "id" : "123", "class" : "1A"}',
      '{"name" : "Sam", "id" : "345", "class" : "1A"}',
      '{"name" : "Jen", "id" : "005", "class" : "1A"}'
     ]


for i in range(len(a)):
    y = json.loads(a[i])
    z = json.loads(b[i])
    if y["r_id"] != z["id"]:
        print(a[i])

输出:

{"r_id":"678","RefNumber":"2341234131","amount":"22.99"}

在使用json文件之前,文件的格式应如下所示:

[{"r_id":"123","RefNumber":"2341234131","amount":"22.99"},
 {"r_id":"345","RefNumber":"2341234131","amount":"22.99"},
 {"r_id":"678","RefNumber":"2341234131","amount":"22.99"}
]

尝试使用此代码(使用文件):

import json

with open('file1.json','r') as a:
    data1 = a.read()
obj1 = json.loads(data1)

with open('file2.json','r') as a:
    data2 = a.read()
obj2 = json.loads(data2)

count = 0
for i in obj1:
    a = obj2[count]
    if i["r_id"] != a["id"]:
        print(i)
    count = count + 1

输出同上

相关问题 更多 >