首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >比较两个JSON对象,而不考虑其中元素的顺序

比较两个JSON对象,而不考虑其中元素的顺序
EN

Stack Overflow用户
提问于 2013-07-12 12:52:19
回答 4查看 32.8K关注 0票数 18

在python中,有没有什么方法/ class / module可以比较两个json对象并打印更改/差异?

我试过使用"json_tools“,它给出了相当好的结果,但是如果在两个json对象中存在具有不同顺序的元素的python列表,则diff会失败。

例如:

JSON 1:

代码语言:javascript
复制
{
    'Person' : 
        {
            'FName'    : 'John',
            'LName'    : 'Rambo',
            'Sex'      : 'Male'
            'Height'   : '6 ft',
            'Weight'   : '90 KG',
            'Children' :
                [
                    {
                        'FName'  : 'Anna',
                        'LName'  : 'Rambo',
                        'Sex'    : 'Female',
                        'Height' : '5 ft',
                        'Weight' : '55 KG',
                    },
                    {
                        'FName'  : 'Jemmy',
                        'LName'  : 'Rambo',
                        'Sex'    : 'Male',
                        'Height' : '5 ft',
                        'Weight' : '60 KG',
                    }

                ]
        }
}

JSON 2:

代码语言:javascript
复制
{
    'Person' : 
        {
            'FName'    : 'John',
            'LName'    : 'Rambo',
            'Sex'      : 'Male'
            'Height'   : '6 ft',
            'Weight'   : '90 KG',
            'Children' :
                [
                    {
                        'FName'  : 'Jemmy',
                        'LName'  : 'Rambo',
                        'Sex'    : 'Male',
                        'Height' : '5 ft',
                        'Weight' : '60 KG',
                    },
                    {
                        'FName'  : 'Anna',
                        'LName'  : 'Rambo',
                        'Sex'    : 'Female',
                        'Height' : '5 ft',
                        'Weight' : '55 KG',
                    }
                ]
        }
}

json diff显示两个json不匹配。从逻辑上讲,这些是相同的..

在python中有没有一个很好的json匹配和比较的方法?

EN

回答 4

Stack Overflow用户

发布于 2016-09-23 22:27:27

您可以使用jsondiff

代码语言:javascript
复制
from jsondiff import diff
diff(json1, json2)

..。假设您已经使用示例中的json条目加载了json1和json2 (顺便说一句,您在“性别”条目后缺少逗号)。

票数 13
EN

Stack Overflow用户

发布于 2018-09-04 23:07:23

您可以在ignore_order=True中使用deepdiff

代码语言:javascript
复制
from deepdiff import DeepDiff
t1 = {1:1, 2:2, 3:3, 4:{"a":"hello", "b":[1, 2, 3]}}
t2 = {1:1, 2:2, 3:3, 4:{"a":"hello", "b":[1, 3, 2, 3]}}
ddiff = DeepDiff(t1, t2, ignore_order=True)
print (ddiff)
{}
票数 8
EN

Stack Overflow用户

发布于 2013-07-12 13:34:46

在逻辑上它们是相同的。

他们不是。顺序在JSON数组中很重要。我不知道有什么工具会为你忽略订单。你可以试着在反序列化的结构上递归,把列表变成某种多集,把字典变成某种可哈希的、冻结的字典(所以你可以把它们放进多集),然后在上面运行你自己的diff例程。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17607640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档