如何在python中比较2个json [关闭]

Posted

技术标签:

【中文标题】如何在python中比较2个json [关闭]【英文标题】:how to compare 2 json in python [closed] 【发布时间】:2012-06-23 21:26:32 【问题描述】:

如何在python中比较2个json对象下面是示例json。

sample_json1=
    
       "globalControlId": 72,
       "value": 0,
       "controlId": 2
   ,
   
       "globalControlId": 77,
       "value": 3,
       "controlId": 7
   


sample_json2=
    
       "globalControlId": 72,
       "value": 0,
       "controlId": 2
   ,
   
       "globalControlId": 77,
       "value": 3,
       "controlId": 7
   

【问题讨论】:

你能解释一下为什么if sample_json1 == sample_json2:不够用吗??? 您编写的“json”示例无效。如果您需要任何帮助,您必须向我们提供更多上下文/工作代码。 【参考方案1】:

似乎通常的比较工作正常

import json
x = json.loads("""[
    
       "globalControlId": 72,
       "value": 0,
       "controlId": 2
   ,
   
       "globalControlId": 77,
       "value": 3,
       "controlId": 7
   
]""")

y = json.loads("""["value": 0, "globalControlId": 72,"controlId": 2, "globalControlId": 77, "value": 3, "controlId": 7 ]""")

x == y # result: True    

【讨论】:

【参考方案2】:

这些不是有效的 JSON / Python 对象,因为数组 / 列表字面量在 [] 而不是 内:

UPDATE:比较字典列表(对象的序列化JSON数组),同时忽略列表项的顺序,列表需要排序或转换为集合

sample_json1=["globalControlId": 72, "value": 0, "controlId": 2,
              "globalControlId": 77, "value": 3, "controlId": 7]
sample_json2=["globalControlId": 77, "value": 3, "controlId": 7,
              "globalControlId": 77, "value": 3, "controlId": 7, # duplicity
              "globalControlId": 72, "value": 0, "controlId": 2]

# dictionaries are unhashable, let's convert to strings for sorting
sorted_1 = sorted([repr(x) for x in sample_json1])
sorted_2 = sorted([repr(x) for x in sample_json2])
print(sorted_1 == sorted_2)

# in case the dictionaries are all unique or you don't care about duplicities,
# sets should be faster than sorting
set_1 = set(repr(x) for x in sample_json1)
set_2 = set(repr(x) for x in sample_json2)
print(set_1 == set_2)

【讨论】:

如果订单更改以下示例的示例失败,这将不起作用 sample_json1=["globalControlId": 72, "value": 0, "controlId": 2, "globalControlId": 77, "value": 3, "controlId": 7 ] sample_json2=[ "globalControlId": 77, "value": 3, "controlId": 7, "globalControlId": 72, "value": 0, "controlId": 2] 比较应该成功,即使订单发生变化,请在这里帮助我 根据cmets更新 @zochhuana 其他解决方案是否处理嵌套的 json?即使确实如此,我也不会指望它..如果您需要进行深入比较,谷歌的***链接之一是Deep Equality Test for Nested Python Structures

以上是关于如何在python中比较2个json [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Python 中解析 JSON 并将 2 个字段放入字典中? [复制]

如何从 json 数据中读取特定字段? [关闭]

如何在不关闭和重新加载应用程序的情况下获得新的 JSON 响应

python3,如何对比2个结构一样的json?

如何比较 3 组数据以理清其中 2 组数据如何影响第三组数据? [关闭]

如何比较 2 个列表并在 Python 中获取 True 或 False 列表? [复制]