Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按键比较2个JSON文件,并使用python仅返回键值的差异_Python_Json - Fatal编程技术网

按键比较2个JSON文件,并使用python仅返回键值的差异

按键比较2个JSON文件,并使用python仅返回键值的差异,python,json,Python,Json,JSON1: {“test”:{“name”:“test”,“bucket”:{“name”:“}”,格式:{“JSON”:{“path”:“}”,状态:{“id”:“01658204657296583104”,“schema”:{“InputSchema”:{“RecordColumns”:{“Mapping”:“0”,“name”:“column0”,“SqlType”:“STRING”},{“Mapping”:“1”,“name”:“column1,“SqlType”:“STRING”},

JSON1:

{“test”:{“name”:“test”,“bucket”:{“name”:“}”,格式:{“JSON”:{“path”:“}”,状态:{“id”:“01658204657296583104”,“schema”:{“InputSchema”:{“RecordColumns”:{“Mapping”:“0”,“name”:“column0”,“SqlType”:“STRING”},{“Mapping”:“1”,“name”:“column1,“SqlType”:“STRING”},{“Mapping”:“4”,“Name”:“column4”,“SqlType”:“STRING”},{“Mapping”:“5”,“Name”:“column5”,“SqlType”:“STRING”},{“Mapping”:“6”,“Name”:“STRING”},{“Mapping”:“7”,“Name”:“time_column7”,“SqlType”:“PERIOD”},{“Mapping”:“8”,“Name”:“column8”,“SqlType”},{“Mapping”:“9”,“Name”:“Name”:“column9”,“SqlType”:“STRING”{“Mapping”},{“Mapping”10、“名称”:“column10”、“SqlType”:“NUMBER”}、{“Mapping”:“11”、“名称”:“column11”、“SqlType”:“STRING”}、{“Mapping”:“12”、“名称”:“column12”、“SqlType”:“STRING”}、{“Mapping”:“14”、“名称”:“column14”、“SqlType”:“NUMBER”}、{“Mapping”:“15”、“名称”:“time_column15”、“SqlType”:“PERIOD”}、{“Mapping”;“Mapping”:“16”、“名称”:“column16”“,”SqlType“:”NUMBER“},“{”Mapping“:”17”,“Name“:”column17”,“SqlType“:”STRING“},{”Mapping“:”18”,“Name“:”column18”,“SqlType“:”STRING“}”,“RecordEncoding“:”UTF-8”,“RecordFormat“:”{”MappingParameters“:”{”RecordRowPath“$”},“RecordFormatType“:”JSON“}}}},,”进度“:”[637637],“sources“:{loc/allure.JSON”:“{”loc/allure“:”/allure.JSON“,”etag”:“无”、“id”:“}}”,事件:[]}

JSON2:

{“test”:{“name”:“test”,“bucket”:{“name”:“}”,格式:{“JSON”:{“path”:“}”,状态:{“id”:“01658204657296583104”,“schema”:{“InputSchema”:{“RecordColumns”:{“Mapping”:“0”,“name”:“column0”,“SqlType”:“STRING”},{“Mapping”:“1”,“name”:“column1SqlType“:“字符串”},{“映射”:“4”,“名称”:“列4”,“SqlType”:“字符串”},{“映射”:“5”,“名称”:“列5”,“SqlType”:“字符串”},{“映射”:“6”,“名称”:“列6”,“SqlType”:“字符串”},{“映射”:“7”,“名称”:“时段”},{“映射”:“8”,“名称”:“列8”,“SqlType”:“列8”,“SqlType”:“映射”:“9”,“名称”:“列9”,“SqlType”:“字符串”},{“映射”:“映射”:10、“名称”:“column10”、“SqlType”:“字符串”}、{“映射”:“11”、“名称”:“column11”、“SqlType”:“字符串”}、{“映射”:“12”、“名称”:“column12”、“SqlType”:“字符串”}、{“映射”:“名称”:“column13”、“SqlType”:“字符串”}、{“映射”:“14”、“名称”:“column14”、“SqlType”:“编号”}、{“映射”:“15”、“名称”:“时间”{“column15”、“SqlType”:“期间”}、{“映射”:“16”、“名称”:“column16”“,”SqlType“:”NUMBER“},“{”Mapping“:”17”,“Name“:”column17”,“SqlType“:”STRING“},{”Mapping“:”18”,“Name“:”column18”,“SqlType“:”STRING“}”,“RecordEncoding“:”UTF-8”,“RecordFormat“:”{”MappingParameters“:”{”RecordRowPath“$”},“RecordFormatType“:”JSON“}}}},,”进度“:”[637637],“sources“:{loc/allure.JSON”:“{”loc/allure“:”/allure.JSON“,”etag”:“无”,“id:“01658204657296583104”},“事件”:[]}}


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

这段简单的代码使用递归函数提取所有嵌入列表/目录中的所有值。然后它将比较通过解析
json1
json2
和d获得的两个列表在相似的列表索引中检测所有不同的值:

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)
结果:

[(36, 'NUMBER', 'STRING'), (68, '', '01658204657296583104')]

您尝试了什么?请共享一些代码第二个JSON无效您的数据显示了嵌入的字典。您想在每个嵌入级别上比较键还是只在给定的嵌入级别上比较键?@Jonathan:缺少一个
:“
测试之后
,我不想在列表中显示此代码。如果我们更改或,请使用列表der,然后它将为我提供不同的输出。如果不使用list,我希望脚本以及这两个json文件应为不同的路径获取,而不是在同一代码中。如果您只提取两个文件中不同的值,您如何知道这些不同的值在您的数据结构中的位置?我的答案为您提供了一个索引at允许您轻松找到差异。如果这不是您想要的,您应该在最初的帖子中提供所需输出的示例。如果您不写下来,没有人知道您在想什么。