栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何以相同的顺序比较两个具有相同元素的JSON对象?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何以相同的顺序比较两个具有相同元素的JSON对象?

如果你想要两个具有相同元素但顺序不同的对象相等,那么显而易见的事情是比较它们的排序后的副本-例如,以JSON字符串

a
和表示的字典
b

import jsona = json.loads("""{    "errors": [        {"error": "invalid", "field": "email"},        {"error": "required", "field": "name"}    ],    "success": false}""")b = json.loads("""{    "success": false,    "errors": [        {"error": "required", "field": "name"},        {"error": "invalid", "field": "email"}    ]}""")
>>> sorted(a.items()) == sorted(b.items())False

…但这是行不通的,因为在每种情况下,”errors”顶层dict的项都是具有相同元素的列表,但是顺序不同,并且sorted()除了“ top”级别的内容外,不会尝试对任何内容进行排序一个可迭代的。

为了解决这个问题,我们可以定义一个ordered函数,该函数将对找到的所有列表进行递归排序(并将字典转换(key, value)成对列表,以便它们可排序):

def ordered(obj):    if isinstance(obj, dict):        return sorted((k, ordered(v)) for k, v in obj.items())    if isinstance(obj, list):        return sorted(ordered(x) for x in obj)    else:        return obj

如果我们将此功能应用于a和b,结果比较相等:

>>> ordered(a) == ordered(b)True


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/411140.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号