我有兩個命名的 JSON 檔案new,并且old這些檔案有一些資料。在這里,我想new.json與old.json檔案進行比較,同時比較這兩個 JSON 檔案中是否有相同的資料我不想創建任何新的 JSON 檔案
new.json如果我有不同的資料,如下所示old.json
new.json:
[
{
"name": "Mohan raj",
"age": 23,
"country": "INDIA"
},
{
"name": "Kiruthika",
"age": 18,
"country": "INDIA"
},
{
"name": "Munusamy",
"age": 45,
"country": "INDIA"
},
{
"name": "John Wood",
"age": 35,
"country": "USA"
},
{
"name": "Mark Smith",
"age": 25,
"country": "USA"
}
]
old.json:
[
{
"name": "John Wood",
"age": 35,
"country": "USA"
},
{
"name": "Mark Smith",
"age": 30,
"country": "USA"
},
{
"name": "Oscar Bernard",
"age": 25,
"country": "Australia"
}
]
如果new.json檔案有任何相同的資料,old.json我們必須跳過該資料,并且new.json檔案有任何更新的資料old.json和新資料,new.json我們必須創建一個新的 JSON 檔案updated.json,以上述場景的資料命名。
生成的 JSON 檔案需要如下所示:
updated.json:
[
{
"name": "Mohan raj",
"age": 23,
"country": "INDIA"
},
{
"name": "Kiruthika",
"age": 18,
"country": "INDIA"
},
{
"name": "Munusamy",
"age": 45,
"country": "INDIA"
},
{
"name": "Mark Smith",
"age": 25,
"country": "USA"
}
]
uj5u.com熱心網友回復:
花了我一段時間才得到,感謝您回答我的問題,似乎“更新”可能只是表示為“新而不是舊”?
我認為是這樣,因為以下似乎可以完成這項作業。
關鍵是對物件本身進行比較,并且不想進行物件比較(深度相等),只需將每個物件哈希回 JSON 即可為我們提供可以比較的字串表示形式:
import json
old_hashes = []
old_objs = json.load(open('old.json'))
for old_obj in old_objs:
old_hash = json.dumps(old_obj)
old_hashes.append(old_hash)
# "Updated" means "new not in old"
updated_objs = []
new_objs = json.load(open('new.json'))
for new_obj in new_objs:
new_hash = json.dumps(new_obj)
if new_hash not in old_hashes:
updated_objs.append(new_obj)
print(json.dumps(updated_objs, indent=2))
當我對你的old.json和new.json運行它時,我得到:
[
{
"name": "Mohan raj",
"age": 23,
"country": "INDIA"
},
{
"name": "Kiruthika",
"age": 18,
"country": "INDIA"
},
{
"name": "Munusamy",
"age": 45,
"country": "INDIA"
},
{
"name": "Mark Smith",
"age": 25,
"country": "USA"
}
]
uj5u.com熱心網友回復:
您可以在下面實作它。跟蹤來自舊 json 的資料。
import json
# read json file
with open('new.json') as f:
new_data = json.load(f)
with open('old.json') as f:
old_data = json.load(f)
old_json_list = [
{elem["name"], elem["age"], elem["country"]} for elem in old_data]
updated_list = []
for elem in new_data:
elm = {elem["name"], elem["age"], elem["country"]}
if elm not in old_json_list:
updated_list.append(elem)
with open('updated.json', 'w') as f:
json.dump(updated_list, f)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/419296.html
標籤:
