一篇长文带你在python里玩转Json数据

MySQL的`JSON`类型:如何利用`JSON_EXTRACT`与`JSON_UNQUOTE`提取并处理字符串类型的数据? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于阅读和编写。MySQL 从 5.7.22 版本开始原生支持JSON数据类型,允许我们在数据库中直接存储和操作JSON文档。JSON类型的优势:能够存储结构不固定的数据,避免了传统关系型数据库严格模式的限制。MySQL 提供了针对JSON数据的优化查询函数,例如等,能够高效地检索JSON文档中的特定数据。方便与 NoSQL 数据库和 Web APIs 集成,简化数据交换流程。JSON。 阅读详情

640?wx_fmt=jpeg

Json简介

Json(JavaScript Object Notation)

640?wx_fmt=png

这因为Json是一种轻量级的数据交换格式,具有数据格式简单,读写方便易懂等很多优点。用它来进行前后端的数据传输,大大的简化了服务器和客户端的开发工作量。

而且相对于XML来说,更加的轻量级,更方便解析。

今天我们讲讲如何在python里玩转Json数据?

640?wx_fmt=png

在Json中,遵循“key-value”的这样一种方式。

比如最简单的这种:“{"name" : "zhuxiao5"}”,跟python 里的字典似的,也是一个Json格式的数据。

复杂一点的比如这种(后文会多次使用到这个例子):

{
    "animals": {
        "dog": [
            {
                "name": "Rufus",
                "age":15
            },
            {
                "name": "Marty",
                "age": null
            }
        ]
    }
}

以上图为例,再多说几句Json格式的特点

  • 对象通过键值对表现;

  • 键通过双引号包裹,后面跟冒号“:”,然后跟该键的值;

  • 值可以是字符串、数字、数组等数据类型;

  • 对象与对象之间用逗号隔开;

  • “{}”用来表达对象;

  • “[]”用来表达数组;

Python中的Json模块

Python中也自带了Json模块,其中json.dumps()、json.loads()较为常用。

 

json.dumps() 是将 python 对象转化为 json。

json.loads() 是将 json 转化为 python 对象。

640?wx_fmt=jpeg

#json.dumps(),json.loads()
import json
dict_data = {"a": 1, "b": 2}
# 将dict格式数据转换成json格式字符串
dump_data = json.dumps(dict_data)
# 将json格式字符串转换成对应的python值
load_data = json.loads(dump_data)
# 打印转换结果
print(type(dict_data),dict_data)
print(type(dump_data),dump_data)
print(type(load_data),load_data)

运行结果:

<class 'dict'> {'a': 1, 'b': 2}
<class 'str'>   {"a": 1, "b": 2}
<class 'dict'> {'a': 1, 'b': 2}

在例子中一开始的变量 dict_data 是一个字典,json.dumps() 后,将dict格式数据转换成json格式字符串。这时候虽然都是{'a': 1, 'b': 2},但是格式却前后不一样。随后又通过 json.loads(),重新将json格式字符串转换成字典。

在线解析Json

在实际应用中,要提取json数据,就要了解返回json数据的结构。

可是Json格式的数据往往是这样的。

640?wx_fmt=png

640?wx_fmt=jpeg

大家别担心,我们可以将数据复制到一些json插件或在线解析!

比如这个插件是小五常用的:

640?wx_fmt=png

此时再打开刚才的网址

640?wx_fmt=png

是不是清晰了很多呢?

如果用python来获取里面的数据怎么做的?

先利用 json.loads() 来将 Json 转成字典,再用 get() 函数直到得到我们想要的list 对象,那么对于 list 里面的数据我们用个 for 循环就行啦~

额,有点绕。

640?wx_fmt=jpeg

还是文章一开始的例子,我们想获取其中所有狗狗的名字:

{
    "animals": {
        "dog": [
            {
                "name": "Rufus",
                "age":15
            },
            {
                "name": "Marty",
                "age": null
            }
        ]
    }
}

我们可以这样做:

load_data = json.loads(dump_data)
data = load_data.get("animals").get("dog")
result1 = []
for i in data:
    result1.append(i.get("name"))
print(result1)

运行结果:

['Rufus', 'Marty']

这样确实可以获得我们想要的结果。

PS:类似的在线解析网站也有很多,比如 https://www.json.cn。

JsonPath

不知道大家还记不记得,在一开始介绍Json时,我提到了它相对于XML来说,更加的轻量级,更方便解析。

既然 XML 人家都有 XPATH ,那么Json有没有类似的工具呢?

640?wx_fmt=jpeg

JsonPath 是一种信息抽取类库,是从Json文档中抽取指定信息的工具。

JsonPath 对于 Json 来说,相当于 XPATH 对于 XML。


Json结构清晰,可读性高,复杂度低,非常容易匹配,下表是JsonPath的用法。

640?wx_fmt=png

640?wx_fmt=jpeg

没错,还是这个例子,我们这次尝试用JsonPath获取其中所有狗狗的名字:

{
    "animals": {
        "dog": [
            {
                "name": "Rufus",
                "age":15
            },
            {
                "name": "Marty",
                "age": null
            }
        ]
    }
}

我们可以这样做:

load_data = json.loads(dump_data)
jobs=load_data['animals']['dog']
result2 = []
for i in data:
# 从根节点开始,匹配name节点
    result2.append(jsonpath.jsonpath(i,'$..name')[0])
print(result2)

其中 $..name 代表从根节点开始,匹配name节点

运行结果:

['Rufus', 'Marty']

利用 JsonPath 同样可以获得我们想要的结果。

我们在后续实例演练中将继续采用 JsonPath 来抽取数据。

实例演练

示例:我们利用来生成Json数据,并从中获取热评数据。

http://music.163.com/api/v1/resource/comments/R_SO_4_483671599?limit=10&offset=0

 

在浏览器(已安装Json解析插件)中打开:

640?wx_fmt=png

640?wx_fmt=png

标红区域的数据是我们本次想要获取的。

640?wx_fmt=gif

def get_comments(url):
    data = []
    doc = get_json(url)
    jobs=doc['hotComments']
    for job in jobs:
        dic = {}
        #从根节点开始,匹配content节点
        dic['content']=jsonpath.jsonpath(job,'$..content')[0] #评论
        dic['time']= stampToTime(jsonpath.jsonpath(job,'$..time')[0]) #时间
        dic['userId']=jsonpath.jsonpath(job['user'],'$..userId')[0]  #用户ID
        dic['nickname']=jsonpath.jsonpath(job['user'],'$..nickname')[0]#用户名
        dic['likedCount']=jsonpath.jsonpath(job,'$..likedCount')[0] #赞数
        data.append(dic)
    return pd.DataFrame(data)

final_result = get_comments('http://music.163.com/api/v1/resource/comments/R_SO_4_483671599?limit=10&offset=0')
(完整代码见文末下载地址)

运行结果:

640?wx_fmt=png

成功获取√

希望本文能让大家以后玩转Json数据更轻松~

本文所有案例的代码已上传github:

https://github.com/zpw1995/aotodata/tree/master/interest/Json

Jmeter 通过JSON Extrator 获取值 现在接口返回的格式大多都是JSON格式的,这个时候使用JSON Extrator 来提取想要的值做参数,个人感觉用JSON Extrator 比Regular Expression Extrator 要方便一点。 Names of created variables: 保持的变量名 JSON Path expressions: JSON 表达式 Match No. 匹配哪一个,为空默认匹... 阅读详情

相关推荐

【Python】python中二维list类型与python把list中去掉数据中的双引号

需要注意的是,在 Python 中,二维列表并不是一个内置的数据类型,而是通过列表的嵌套来实现的。在 Python 中,二维列表(2D List)也叫做列表的列表(List of Lists),是由列表组成的列表。在二维列表中,每个元素都是一个列表,这些列表可以包含不同类型的元素,并且长度可以不同。然后,使用索引修改二维列表中的元素,并输出修改后的二维列表。是一个包含两个子列表的列表,每个子列表都包含三个整数元素。函数应用于列表中的每个元素,并返回一个迭代器,我们需要将其转换为列表,以便输出处理后的结果。

Fanjufei的博客 1491

MySQL中json_extract函数说明

在日常业务开发中通常mysql数据库中某个字段会需要存储json格式字符串,查询的时候有时json数据较大,每次全部取出再去解析查询效率较低,也比较麻烦,则Mysql5.7版本提供提供函数json_extract,可以通过key查询value值(如果是json数组类型,可以通过下标获取对应位置的值),比较方便。Mysql5.7版本以后新增的功能,Mysql提供了一个原生的Json类型,Json值将不再以字符串的形式存储,而是采用一种允许快速读取文本元素(document elements)的内部二进制(in

liuwei0376的专栏 3万+

Aircrack-ng实战指南:从基础扫描到高级密码破解

本文提供了一份详尽的Aircrack-ng实战指南,涵盖从环境搭建到密码破解的全过程。内容包括如何准备兼容的无线网卡与Kali Linux系统,使用airodump-ng进行网络扫描与信息收集,捕获WPA2握手包的关键步骤,以及利用字典文件进行密码破解的核心原理与技巧。文章强调该技术应仅用于授权的安全测试与学习,旨在帮助读者理解无线网络安全以加强自身防护。

m3n5b7v8c9x的博客 552

mysql中json_extract的使用方法

mysql5.7版本开始支持JSON类型字段,本文详细介绍json_extract函数如何获取mysql中的JSON类型数据

王尚可的博客 1万+

【ZYNQ驱动双AD9361实战】(一)从官方参考设计到自定义移植

本文详细介绍了如何将ADI官方的单AD9361参考设计移植到ZYNQ平台以驱动双AD9361射频板卡。内容涵盖从环境搭建、官方工程架构解析,到硬件HDL工程修改(包括顶层设计、引脚分配及TCL脚本适配)以及Linux设备树软件配置的全流程实战指南,帮助开发者实现自定义双通道射频收发系统。

weixin_29170327的博客 364

产业大脑+未来工厂:揭秘浙江数字经济系统的5大核心场景搭建指南

本文深入解析了“产业大脑+未来工厂”这一浙江数字经济系统的核心范式,并提供了五大核心场景的实战搭建指南。文章详细阐述了从供应链协同、产能共享到产品创新、质量追溯及绿色低碳等关键场景的构建逻辑与技术架构,旨在帮助企业实现从技术驱动到场景驱动的价值落地,破解数据孤岛难题,提升产业链整体效能。

mac99的博客 668

一篇长文带你在Python里玩转Json数据

Json简介 Json(JavaScript Object Notation) 很多网站都会用到Json格式来进行数据的传输和交换,就像上篇我提到的网易云音乐接口,它们返回的数据都是Json格式的。 这因为Json是一种轻量级的数据交换格式,具有数据格式简单,读写方便易懂等很多优点。用它来进行前后端的数据传输,大大的简化了服务器和客户端的开发工作量。 而且相对于XML来说,更加的轻量级,更方便解...

chen801090的博客 670

基于ESP32的气象雷达站设计与实现

物联网技术通过嵌入式设备实现环境数据的实时采集与可视化,其中ESP32凭借其双核处理器和WiFi/蓝牙功能成为热门选择。本项目利用ESP32结合LVGL图形库,构建了一个低成本气象监测系统,通过OpenWeatherMap API获取全球气象数据并在7英寸触摸屏上动态展示。系统采用三级优化策略处理高分辨率雷达图,包括服务端预处理、硬件加速解码和显示增强,有效解决了内存占用和帧率问题。在物联网设备开发中,类似方案可应用于智能家居、农业监测等场景,特别是需要实时数据可视化的领域。通过SPIFFS存储和zlib压

weixin_42524864的博客 424

一篇长文带你在python里玩转Json数据(3)

此时再打开刚才的网址是不是清晰了很多呢?如果用python来获取里面的数据怎么做的?先利用 json.loads() 来将 Json 转成字典,再用 get() 函数直到得到我们想要的list 对象,那么对于 list 里面的数据我们用个 for 循环就行啦~额,有点绕。还是文章一开始的例子,我们想获取其中所有狗狗的名字:“dog”: [“age”:15},我们可以这样做:运行结果:这样确实可以获得我们想要的结果。PS:类似的在线解析网站也有很多JsonPath。

2401_84140060的博客 401

无人机WIFI集群组网技术详解及成本分析

无人机WIFI集群组网技术是指利用无人机作为移动平台,通过集成高性能的WIFI模块,实现多架无人机之间以及无人机与地面控制站之间的无线通信组网。在协议层面,无人机WIFI集群组网需要遵循标准的无线通信协议,如IEEE 802.11系列(即WIFI标准),同时可能还需定制或优化路由协议、媒体访问控制(MAC)协议等,以确保高效、可靠的数据传输。数据安全与隐私保护:无人机集群组网中传输的数据可能涉及敏感信息,需采取加密、认证等安全措施,确保数据传输的安全性和用户隐私的保护。根据性能不同,价格差异较大。

专注多旋翼、复合翼无人机技术研究,从事低空经济行业。 1584

构网型逆变器下垂控制与电流限幅策略研究:理论、仿真与代码实现

随着分布式发电和微电网技术的快速发展,构网型(Grid-Forming, GFM)逆变器因其能够自主建立电压和频率参考、支撑弱电网及孤岛运行而受到广泛关注。本文提出并实现了一种基于下垂控制的构网型逆变器控制策略,将逆变器等效为受控电压源,通过L型滤波器接入配电网。在公共耦合点(PCC)处实时测量三相电压和电流,计算有功和无功功率,进而采用P-w和Q-V下垂控制生成内部频率和电压幅值,合成三相参考电压。针对故障情况下过电流问题,设计了一种自适应电流限幅模块:当电流幅值超过设定上限时,动态降低电压参考系数k_s

huanghm88的专栏 156

一篇长文带你在python里玩转Json数据,讲的太透彻了

这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。最近我才对这些路线做了一下新的更新,知识体系更全面了。

芯_v_648374雨馨博客 816

KubeVela入门到精通-K8S多集群交付

KubeVela是一个功能强大、易于使用、高度可扩展的应用交付与管理平台。它基于Kubernetes和OAM 技术构建,通过开放应用模型(OAM)来作为顶层的抽像,提供了声明式部署、多集群/混合环境支 持、插件与扩展性、中心化管控以及易于使用与可观测性等特点。

小杨同学的博客 1271

python json添加数据_一篇长文带你在python里玩转Json数据!

Json简介Json(JavaScript Object Notation)很多网站都会用到Json格式来进行数据的传输和交换。这因为Json是一种轻量级的数据交换格式,具有数据格式简单,读写方便易懂等很多优点。用它来进行前后端的数据传输,大大的简化了服务器和客户端的开发工作量。而且相对于XML来说,更加的轻量级,更方便解析。今天我们讲讲如何在python里玩转Json数据?在Json中,遵循“k...

weixin_39575775的博客 693

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

json_extract提取复杂json_一篇长文带你在Python里玩转Json数据

Json简介Json(JavaScript Object Notation)很多网站都会用到Json格式来进行数据的传输和交换,就像上篇我提到的网易云音乐接口,它们返回的数据都是Json格式的。这因为Json是一种轻量级的数据交换格式,具有数据格式简单,读写方便易懂等很多优点。用它来进行前后端的数据传输,大大的简化了服务器和客户端的开发工作量。而且相对于XML来说,更加的轻量级,更方便解析。今天我...

weixin_39616348的博客 1569

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

json字符串转成formdata_一篇长文带你在Python里玩转Json数据

Json简介Json(JavaScript Object Notation)很多网站都会用到Json格式来进行数据的传输和交换,就像上篇我提到的网易云音乐接口,它们返回的数据都是Json格式的。这因为Json是一种轻量级的数据交换格式,具有数据格式简单,读写方便易懂等很多优点。用它来进行前后端的数据传输,大大的简化了服务器和客户端的开发工作量。而且相对于XML来说,更加的轻量级,更方便解析。今天我...

weixin_32193393的博客 1140

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

json_extract提取复杂json_一篇长文带你在python里玩转Json数据!

Json简介Json(JavaScript Object Notation)很多网站都会用到Json格式来进行数据的传输和交换。这因为Json是一种轻量级的数据交换格式,具有数据格式简单,读写方便易懂等很多优点。用它来进行前后端的数据传输,大大的简化了服务器和客户端的开发工作量。而且相对于XML来说,更加的轻量级,更方便解析。今天我们讲讲如何在python里玩转Json数据?在Json中,遵循“k...

weixin_39793794的博客 764

hutol json null值没了_一篇长文带你在python里玩转Json数据

前言文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。作者: 朱小五/凹凸玩数据PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http://note.youdao.com/noteshare?id=3054cce4add8a909e784ad934f956cefJson简介Json(JavaScript Obj...

weixin_36442042的博客 321

C# json解析字符串总是多出双引号_一篇长文带你在python里玩转Json数据

Json简介Json(JavaScript Object Notation)很多网站都会用到Json格式来进行数据的传输和交换,就像上篇我提到的网易云音乐接口,它们返回的数据都是Json格式的。这因为Json是一种轻量级的数据交换格式,具有数据格式简单,读写方便易懂等很多优点。用它来进行前后端的数据传输,大大的简化了服务器和客户端的开发工作量。而且相对于XML来说,更加的轻量级,更方便解...

weixin_39595487的博客 364
上一篇: 推荐几个你可能感兴趣的公众号
下一篇: 真实的北京IT圈:后厂村姑 vs 后厂村花?
菜鸟学Python
博客等级 码龄9年 8087粉丝 571原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值