按键比较两个JSON文件,使用python只返回键值的差异

2024-09-27 21:32:09 发布

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

JSON1:

{“测试”的主要目的是,{“主要”的“测试”以“基本”为基础,以“基本”为“基本”的“他们”的“基本”以“格式”为基本的“JSON”的“{“路径”以以基本“}”的方式,国家“{”以“为“主要”的“id”为“01658204204659696583104”的“模式”,“模式”以“{“主要的列列为基础:以以以“为基础”的基础,以以“为基础的以以国家为基础的以以国家为基础的以以以以自然为基础的”的以以以“为基础的的的的为基础,{“映射”为”的“映射”为“2”的“以以以以以”为基础的为基础”为基础的“主要的”的主要的“在,“SqlType”:“STRING”},{“Mapping”:“4”,“Name”:“column4”,“SqlType”:“STRING”},{“Mapping”:“5”,“Name”:“column5”,“SqlType”:“STRING”},{“Mapping”:“6”,“Name”:“column6”,“SqlType”:“STRING”},{“Mapping”:“7,“Name”:“time_column7”,“SqlType”:“PERIOD”},{“Mapping”:“8”,“Name”:“column8”,“SqlType”:“STRING”},{“Mapping”:“9”,“Name”:“column9”,“SqlType”:“STRING”},{“Mapping”:“10”,“Name”:“column10”,“SqlType”:“NUMBER”},{“Mapping”:“11”,“Name”:“column11”,“SqlType”:“STRING”},{“Mapping”:“12”,“Name”:“column12”,“SqlType”:“STRING”},{“Mapping”:“13”,“Name”:“column13”,“SqlType”:“STRING”},{“Mapping”:“14”,“Name”:“column14”,“SqlType”:“NUMBER”},{“Mapping”:“15”,“Name”:“time_column15”,“SqlType”:“PERIOD”},{“Mapping”:“16”,“Name”:“column16”,“SqlType”:“NUMBER”},{“Mapping”:“17”,“Name”:“column17”,“SqlType”:“STRING”},{“Mapping”:“18”,“Name”:“column18”,“SqlType”:“STRING”}],“RecordEncoding”:“UTF-8”,“RecordFormat”:{“MappingParameters”:{“JSONMappingParameters”:{“RecordRowPath”:“$”}}},“RecordFormatType”:“JSON”}}},进度”:[637637],“来源”:{/诱惑.json“:{“位置”/诱惑.json“,“etag”:“None”,“id”:“}}”,events:[]}}}

JSON2:

{“测试”的主要目的是,{“主要”的“测试”以“基本”为基础,以“基本”为“基本”的“他们”的“基本”以“格式”为基本的“JSON”的“{“路径”以以基本“}”的方式,国家“{”以“为“主要”的“id”为“01658204204659696583104”的“模式”,“模式”以“{“主要的列列为基础:以以以“为基础”的基础,以以“为基础的以以国家为基础的以以国家为基础的以以以以自然为基础的”的以以以“为基础的的的的为基础,{“映射”为”的“映射”为“2”的“以以以以以”为基础的为基础”为基础的“主要的”的主要的“在,“SqlType”:“STRING”},{“Mapping”:“4”,“Name”:“column4”,“SqlType”:“STRING”},{“Mapping”:“5”,“Name”:“column5”,“SqlType”:“STRING”},{“Mapping”:“6”,“Name”:“column6”,“SqlType”:“STRING”},{“Mapping”:“7,“Name”:“time_column7”,“SqlType”:“PERIOD”},{“Mapping”:“8”,“Name”:“column8”,“SqlType”:“STRING”},{“Mapping”:“9”,“Name”:“column9”,“SqlType”:“STRING”},{“Mapping”:“10”,“Name”:“column10”,“SqlType”:“STRING”},{“Mapping”:“11”,“Name”:“column11”,“SqlType”:“STRING”},{“Mapping”:“12”,“Name”:“column12”,“SqlType”:“STRING”},{“Mapping”:“13”,“Name”:“column13”,“SqlType”:“STRING”},{“Mapping”:“14”,“Name”:“column14”,“SqlType”:“NUMBER”},{“Mapping”:“15”,“Name”:“time_column15”,“SqlType”:“PERIOD”},{“Mapping”:“16”,“Name”:“column16”,“SqlType”:“NUMBER”},{“Mapping”:“17”,“Name”:“column17”,“SqlType”:“STRING”},{“Mapping”:“18”,“Name”:“column18”,“SqlType”:“STRING”}],“RecordEncoding”:“UTF-8”,“RecordFormat”:{“MappingParameters”:{“JSONMappingParameters”:{“RecordRowPath”:“$”}}},“RecordFormatType”:“JSON”}}},进度”:[637637],“来源”:{/诱惑.json“:{“loc”:“。”/诱惑.json“,“etag”:“None”,“id”:“01658204657296583104”}},“events”:[]}}}

有人能帮我解决这个问题吗?我需要一个python脚本来比较两个JSON文件,只返回不同的键值。


Tags: name目的idjsonnumberstringtime格式
1条回答
网友
1楼 · 发布于 2024-09-27 21:32:09

此简单代码使用递归函数提取所有嵌入的list/dict中的所有值,然后比较通过解析json1和{}获得的两个列表,并在相似的列表索引中检测所有不同的值:

json1 = {"test":{"name":"test","bucket":{"name":"."},"format":{"JSON":{"path":""}},"state":{"id":"01658204657296583104","schema":{"InputSchema":{"RecordColumns":[{"Mapping":"0","Name":"column0","SqlType":"STRING"},{"Mapping":"1","Name":"column1","SqlType":"STRING"},{"Mapping":"2","Name":"column2","SqlType":"STRING"},{"Mapping":"3","Name":"column3","SqlType":"STRING"},{"Mapping":"4","Name":"column4","SqlType":"STRING"},{"Mapping":"5","Name":"column5","SqlType":"STRING"},{"Mapping":"6","Name":"column6","SqlType":"STRING"},{"Mapping":"7","Name":"time_column7","SqlType":"PERIOD"},{"Mapping":"8","Name":"column8","SqlType":"STRING"},{"Mapping":"9","Name":"column9","SqlType":"STRING"},{"Mapping":"10","Name":"column10","SqlType":"NUMBER"},{"Mapping":"11","Name":"column11","SqlType":"STRING"},{"Mapping":"12","Name":"column12","SqlType":"STRING"},{"Mapping":"13","Name":"column13","SqlType":"STRING"},{"Mapping":"14","Name":"column14","SqlType":"NUMBER"},{"Mapping":"15","Name":"time_column15","SqlType":"PERIOD"},{"Mapping":"16","Name":"column16","SqlType":"NUMBER"},{"Mapping":"17","Name":"column17","SqlType":"STRING"},{"Mapping":"18","Name":"column18","SqlType":"STRING"}],"RecordEncoding":"UTF-8","RecordFormat":{"MappingParameters":{"JSONMappingParameters":{"RecordRowPath":"$"}},"RecordFormatType":"JSON"}}},"progress":[637,637],"sources":{"./allure.json":{"loc":"./allure.json","etag":"None","id":""}},"events":[]}}}
json2 = {"test":{"name":"test","bucket":{"name":"."},"format":{"JSON":{"path":""}},"state":{"id":"01658204657296583104","schema":{"InputSchema":{"RecordColumns":[{"Mapping":"0","Name":"column0","SqlType":"STRING"},{"Mapping":"1","Name":"column1","SqlType":"STRING"},{"Mapping":"2","Name":"column2","SqlType":"STRING"},{"Mapping":"3","Name":"column3","SqlType":"STRING"},{"Mapping":"4","Name":"column4","SqlType":"STRING"},{"Mapping":"5","Name":"column5","SqlType":"STRING"},{"Mapping":"6","Name":"column6","SqlType":"STRING"},{"Mapping":"7","Name":"time_column7","SqlType":"PERIOD"},{"Mapping":"8","Name":"column8","SqlType":"STRING"},{"Mapping":"9","Name":"column9","SqlType":"STRING"},{"Mapping":"10","Name":"column10","SqlType":"STRING"},{"Mapping":"11","Name":"column11","SqlType":"STRING"},{"Mapping":"12","Name":"column12","SqlType":"STRING"},{"Mapping":"13","Name":"column13","SqlType":"STRING"},{"Mapping":"14","Name":"column14","SqlType":"NUMBER"},{"Mapping":"15","Name":"time_column15","SqlType":"PERIOD"},{"Mapping":"16","Name":"column16","SqlType":"NUMBER"},{"Mapping":"17","Name":"column17","SqlType":"STRING"},{"Mapping":"18","Name":"column18","SqlType":"STRING"}],"RecordEncoding":"UTF-8","RecordFormat":{"MappingParameters":{"JSONMappingParameters":{"RecordRowPath":"$"}},"RecordFormatType":"JSON"}}},"progress":[637,637],"sources":{"./allure.json":{"loc":"./allure.json","etag":"None","id":"01658204657296583104"}},"events":[]}}}

def get_values(json, lst):
  if isinstance(json, list):
    for item in json: get_values(item, lst)
  elif isinstance(json, dict):
    for item in json.values(): get_values(item, lst)
  else: lst.append(json)

list1 = []; get_values(json1, list1)
list2 = []; get_values(json2, list2)

diff = [(n, x, y) for n,(x,y) in enumerate(zip(list1, list2)) if x != y]
print(diff)

结果:

^{pr2}$

相关问题 更多 >

    热门问题