当前位置:首页 > 生活百科

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

栏目:生活百科日期:2024-12-13浏览:0

在接口测试或其他测试场景中,我们经常需要获取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]]

“js获取json中的某个值(两个字符串比较)” 的相关文章

如何创业成功,创业成功的15个要素

一、树立自己的信誉你如果想一直做个商人,那么你必须树立自己的信誉。虽然你可以不在乎外界对你的争议,甚至你也可以制造争议,但你不能失去信誉,否则你就不是一个商人,...

logo设计步骤是什么,logo设计详细教程

Logo设计得好,便让人过目不忘,甚至还能让消费者一眼就看到品牌的个性。反之,Logo的细节如果没做好,很容易让消费者敬而远之、产生距离感。这里分享8个诀窍,让...

小米移动电源高配版拆解说明书(这款产品容量大价格实惠

1月4日,小米天猫旗舰店预告称,小米移动电源3将在1月11正式开售,售价199元,可充笔记本电脑。这款新品全名“小米移动电源3高配版”,采用一体成型外壳,经UV...

光盘刻录工具哪个好用(3分钟讲解光盘刻录制作方法)

AVI是最常用的视频格式之一,大量的电影都采用这种格式。但是,它不能直接在DVD播放机上播放。因此,将AVI转换为DVD是很常见的,以便更好地在DVD播放器或电...

sql多表查询语句命令(mysql修改表数据语句)

例如:按照department_id查询employees(员工表)和departments(部门表)的信息。方式一(通用型):SELECT…FROM…WHER...

xampp和phpstudy哪个好用(2种PHP开发环境对比分析)

对于php开发小白来说搭建一个php运行环境就是一道坎!因为要做php开发,搭建一个能够运行php网站的服务器环境是第一步,传统的php环境软件非常复杂,好在很...

xdw是什么格式的文件(pdf转word免费的软件介绍)

不论是手机还是相机,大家日常拍摄的大多是JPG格式的照片。但是日常生活中,我们总是听到广告或者周围朋友说我的设备可以记录专业的RAW格式。那么什么是RAW格式,...

pdf如何解密文件(pdf密码强制解除方式)

这里使用的是文件读写流的时候进行异位算法,方法也比较简单。详细见代码,可以是任何文件,图片,pdf等;packageinno320;importjava.io....

cad填充边界定义错误(cad生成边界命令)

在浩辰CAD软件中创建CAD填充的最常用方式是选择一个封闭的图形或在一个封闭的图形区域中拾取一个点。实际上CAD软件也可以无边界填充,但是这种CAD填充方式的应...

嵌入式tomcatn优缺点(简述嵌入式tomcat的原理)

准备工作我们知道SpringBoot的自动装配的秘密在org.springframework.boot.autoconfigure包下的spring.facto...