Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.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
python中的多级JSON差异_Python_Json_Compare_Diff_Unordered - Fatal编程技术网

python中的多级JSON差异

python中的多级JSON差异,python,json,compare,diff,unordered,Python,Json,Compare,Diff,Unordered,如果已经回答了,请联系我回答, 我的问题是我想得到多级json的差异,它是无序的 x=json.loads('''[{"y":2,"x":1},{"x":3,"y":4}]''') y=json.loads('''[{"x":1,"y":2},{"x":3,"y":4}]''') z=json.loads('''[{"x":3,"y":4},{"x":1,"y":2}]''') import json_tools as jt import json_delta as jd print jt

如果已经回答了,请联系我回答, 我的问题是我想得到多级json的差异,它是无序的

x=json.loads('''[{"y":2,"x":1},{"x":3,"y":4}]''')
y=json.loads('''[{"x":1,"y":2},{"x":3,"y":4}]''')
z=json.loads('''[{"x":3,"y":4},{"x":1,"y":2}]''')

import json_tools as jt
import json_delta as jd


print jt.diff(y,z)
print jd.diff(y,z)
print y==z
print x==y
输出为

[{'prev': 2, 'value': 4, 'replace': u'/0/y'}, {'prev': 1, 'value': 3, 'replace': u'/0/x'}, {'prev': 4, 'value': 2, 'replace': u'/1/y'}, {'prev': 3, 'value': 1, 'replace': u'/1/x'}]
[[[2], {u'y': 2, u'x': 1}], [[0]]]
False
True
我的问题是,如何使y和z相等,或者是否存在实际差异取决于JSON的非顺序


这是一种无序的字典列表,但我正在寻找一种级别证明,即列表/字典的列表/目录…

使用以下函数部分解决了它

def diff(prev,lat):
    p=prev
    l=lat


    prevDiff = []
    latDiff = []

    for d1 in p[:]:
        flag = False
        for d2 in l:
            if len(set(d1.items()) ^ set(d2.items())) == 0:
                p.remove(d1)
                l.remove(d2)
                flag = True
                break
        if not flag:
            prevDiff.append(d1)
            p.remove(d1)

    prevDiff = prevDiff + p
    latDiff = latDiff + l

    resJSONdata=[]
    if len(prevDiff) != 0:
        resJSONdata.append({'prevCount':len(prevDiff)})
        resJSONdata.append({'prev':prevDiff})
    if len(latDiff) != 0:
        resJSONdata.append({'latestCount':len(latDiff)})
        resJSONdata.append({'latest':latDiff})

#     return json.dumps(resJSONdata,indent = 4,sort_keys=True)
    return resJSONdata

它并不是递归地将其转换为级别,但出于我的目的,这解决了这个问题

查看这个python库,它将帮助您识别差异

import json

import jsondiff

json1 = json.loads(
    '{"isDynamic": false, "name": "", "value": "SID:<sid>", "description": "instance","argsOrder": 1,"isMultiSelect": false}')

json2 = json.loads(
    '{ "name": "", "value": "SID:<sid>","isDynamic": false, "description": "instance","argsOrder": 1,"isMultiSelect": false}')

res = jsondiff.diff(json1, json2)
if res:
    print("Diff found")
else:
    print("Same")
导入json
导入jsondiff
json1=json.loads(
“{”isDynamic“:false,“name:”,“value:“SID:”,“description:“instance”,“argsOrder”:1,“isMultiSelect”:false}”)
json2=json.loads(
“{”名称“:”值“:”SID:”,“isDynamic”:false,“description:”实例“,”argsOrder“:1,“isMultiSelect”:false}”)
res=jsondiff.diff(json1,json2)
如果有的话:
打印(“发现差异”)
其他:
打印(“相同”)