js获取json中的某个值(两个字符串比较)

   发布日期:2024-05-05 01:46:09     手机:https://m.qqhuangye.com/zhishi/68531.html     违规举报

js获取json中的某个值(两个字符串比较)

在接口测试或其他测试场景中,我们经常需要获取JSON中的某路径下的值进行校验,即从JSON中抽取指定信息。

本文主要介绍满足该需求的Python jmespath库,除此之外还有Jsonpath,有兴趣的可以自行了解。

安装 pip install jmespath 代码示例

我们以下面test_json 这个较为复杂的Json对象为示例。

test_json = {    "code": 200,    "desc": {        "info":"说明",        "update":"2021年3月6日"   },    "data": [       {            "apps": {                "app_op_seq": [                   {                        "action": "点击",                        "module_name": "聚划算",                        "module_type": "resource"                   }               ]           },            "content": {                "des": {                    "company_name": "耐克",                    "intent": [                        "full"                   ]               },                "rel": [                   {                        "des": {                            "person_name": "欧阳玖林",                            "political_status": "金牌会员"                       },                        "ont": [                           {                                "name":"Person",                                "id":1                           },                           {                                "name":"Company",                                "id":2                           },                           {                                "name":"Car",                                "id":3                           }                       ],                        "relIdx": [                            0,                            "8-9"                       ],                        "relName": "欧阳",                        "segs": [                            "耐克篮球鞋"                       ]                   }               ],                "segs": [                    "耐克篮球鞋"               ]           },            "content_op": "查询"       }   ]}

我们先用之前文章中介绍的自研 《Python 实现 JSON、字典数据结构的递归解析》 代码,解析上述 JSON对象,解析结果如下:

1  JsonPath:code   Value:200 2  JsonPath:desc.info   Value:说明 3  JsonPath:desc.update   Value:2021年3月6日 4  JsonPath:data[0].apps.app_op_seq[0].action   Value:点击 5  JsonPath:data[0].apps.app_op_seq[0].module_name   Value:聚划算 6  JsonPath:data[0].apps.app_op_seq[0].module_type   Value:resource 7  JsonPath:data[0].content.des.company_name   Value:耐克 8  JsonPath:data[0].content.des.intent[0]   Value:full 9  JsonPath:data[0].content.rel[0].des.person_name   Value:欧阳玖林 10  JsonPath:data[0].content.rel[0].des.political_status   Value:金牌会员 11  JsonPath:data[0].content.rel[0].ont[0].name   Value:Person 12  JsonPath:data[0].content.rel[0].ont[0].id   Value:1 13  JsonPath:data[0].content.rel[0].ont[1].name   Value:Company 14  JsonPath:data[0].content.rel[0].ont[1].id   Value:2 15  JsonPath:data[0].content.rel[0].ont[2].name   Value:Car 16  JsonPath:data[0].content.rel[0].ont[2].id   Value:3 17  JsonPath:data[0].content.rel[0].relIdx[0]   Value:0 18  JsonPath:data[0].content.rel[0].relIdx[1]   Value:8-9 19  JsonPath:data[0].content.rel[0].relName   Value:欧阳 20  JsonPath:data[0].content.rel[0].segs[0]   Value:耐克篮球鞋 21  JsonPath:data[0].content.segs[0]   Value:耐克篮球鞋 22  JsonPath:data[0].content_op   Value:查询 Process finished with exit code 0 Demo1 查询某个key的值 import jmespathresult = jmespath.search("code",test_json)print(result)# 执行上述代码,输出结果如下:200 Demo2 层级查询某个key的值 import jmespathresult = jmespath.search("desc.info",test_json)print(result)# 执行上述代码,输出结果如下:说明 Demo3 通过索引查询Json中List 元素 import jmespathresult = jmespath.search("data[0]",test_json)print(result)# 执行上述代码,输出结果如下:{\'apps\': {\'app_op_seq\': [{\'action\': \'点击\', \'module_name\': \'聚划算\', \'module_type\': \'resource\'}]}, \'content\': {\'des\': {\'company_name\': \'耐克\', \'intent\': [\'full\']}, \'rel\': [{\'des\': {\'person_name\': \'欧阳玖林\', \'political_status\': \'金牌会员\'}, \'ont\': [{\'name\': \'Person\', \'id\': 1}, {\'name\': \'Company\', \'id\': 2}, {\'name\': \'Car\', \'id\': 3}], \'relIdx\': [0, \'8-9\'], \'relName\': \'欧阳\', \'segs\': [\'耐克篮球鞋\']}], \'segs\': [\'耐克篮球鞋\']}, \'content_op\': \'查询\'} Demo4 复杂层级查询某个key的值 import jmespathresult = jmespath.search("data[0].apps.app_op_seq[0].action",test_json)print(result)# 执行上述代码,输出结果如下:点击

通过上述查询方式,我们基本也能看出,在取列表值时用的 “[]”,取字典值时用的 “.”,来表示路径层级 。

Demo5 对Json中List进行切片查询 import jmespath# 获取relIdx下第0、1个元素 result = jmespath.search("data[0].content.rel[0].relIdx[0:2]",test_json)print(result)# 获取relIdx下全部元素 relIdx[*]result1 = jmespath.search("data[0].content.rel[0].relIdx[*]",test_json)print(result1)# 执行上述代码,输出结果如下:[0, \'8-9\'][0, \'8-9\'] Demo6 其他用法 import jmespath# 批量获取Json中List的字典元素的某个Key的值result = jmespath.search("data[0].content.rel[0].ont[0:3].name",test_json)print(result)# 批量获取Json中List的字典元素的多个Key的值result1 = jmespath.search("data[0].content.rel[0].ont[0:3].[name,id]",test_json)print(result2)# 执行上述代码,输出结果如下:[\'Person\', \'Company\', \'Car\'][[\'Person\', 1], [\'Company\', 2], [\'Car\', 3]]
 
 
本文地址:https://www.qqhuangye.com/zhishi/68531.html,转载请注明出处。"error":400,"message":"over quota","url:"https://www.qqhuangye.com/zhishi/68531.html
 
更多>同类知识

推荐图文
推荐知识
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  违规举报  |  蜀ICP备18010318号-2  |  SiteMaps  |  BaiDuNews 微尚时代网站地图微尚时代百度地图圈圈荒野网站地图圈圈荒野百度地图新新物语网站地图新新物语百度地图淘购网站地图淘购百度地图君子闲话网站地图君子闲话百度地图
Processed in 0.287 second(s), 8 queries, Memory 0.54 M