请链接我回答,如果这个已经被回答,我的问题是我想得到多级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的非顺序。
一种无序的字典列表,但我正在寻找的东西,这是水平证明,是列表/字典的字典列表/字典。
4条答案
按热度按时间qkf9rpyu1#
查看这个python库jsondiff,它将帮助您识别
busg9geu2#
是的!你可以将它与jycm进行比较,它具有开箱即用的rendering tool。
它使用LCS、Edit distance和Kuhn-Munkres来区分数组。
这里有一个通用的例子,set在set中,值在some set中变化
你可以设置no_pairs=False来获取所有对。下面是一个渲染的示例:
对于这里的示例,你可以使用它:
额外的是,你的值被中断作为坐标在平面上,你甚至可以定义一个操作符来确定两个点是否应该匹配!(然后比较它们的价值)
代码如下:
正如您所看到的,jycm报告
{'x': 150, 'y': 150}
和{'x': 100, 'y': 100}
的添加和删除,因为它们的距离太远(超过10),而其他两个点的值发生变化。PS渲染演示
eagi6jfj3#
检出指向deepdiff的deep-comparison-of-json-in-python
k97glaaz4#
用以下函数部分解决了该问题
它并不是递归地把它变成一个层次,但为了我的目的,这解决了这个问题