python json数组解析_Python基础系列(一)搞懂json数据解析与字典之间的关系
是不是一直傻傻分不清楚dumps、dump、loads和load的关系,长痛不如短痛,今天索性就把它写明白,不懂得朋友,请看下面。
这里我先回答一个很常见的问题,为什么 Python 会有四个操作 Json 的函数?按理说应该就只有两个的,一个解码,一个编码。
首先 Json 是一种数据格式,文件通常是以.json作为后缀,这种结构在互联网很是常见和方便。Python 这么牛逼,也想添加这个结构性的数据,所以 dict字典数据类型就这么来了, dict 也是键和键值的结构,和 Json 几乎一致。
但是问题了,Json 文件这么的流行,Python 也需要支持 Json文件的读取和写入的,所以json.load()和json.dump(),就这么被设计出来了。
但是随着Python爬虫的兴起,越来越多的 Python 爬虫需要处理网站抓取的 json 数据,进行处理转换为 Python 字典类型,但是现有的 load 和 dump 并不能解决这样的问题,所以此时 json.loads()和json.dumps() 隆重登场。
详细的介绍请看下方:
1、json.dumps()
import json
dict1 = {
'name': '西园公子',
'salary': '66666',
}
json_str = json.dumps(dict1) # 将字典格式 dict1 转为 Json 格式的字符串
print(f"json_str:{json_str}, json_str_type:{type(json_str)}")
# json_str:{"name": "\u897f\u56ed\u516c\u5b50", "salary": "66666"}, json_str_type:
可能你会疑惑了,这个 dumps 貌似也没啥用,只是将 dict 转为 json格式的字符串。这里面一般有两个用处:
1、web后端和前端之间进行 json 数据的传输,Python 在后端就需要将字典转换成通用的 Json 格式 ,以便于前端对数据进行 Json 解码。另外在爬虫中也是常见
2、可以直接复制上面的 json_str 内容,直接新建一个以 .json 后缀的文件,将内容写入,就可生成一个 Json 文件,如果是这种用途的话可直接使用 json.dump(dict_data, fp) 一步到位。
细心的你会发现,我上面写的 dict1 中的键和键值,都是以单引号'进行包裹的,而在 json_str 中则是以双引号"。这是因为标准的 Json 文件语法中是以双引号包裹字符串的。
2、 json.loads()
对于一个 Json 数据,想转成 dict 类型,就需要用 json.loads(json_str), json字符串→ python对象(dict)。
import json
json_str2 = '{"name": "\u897f\u56ed\u516c\u5b50", "salary": "66666"}'
dict2 = json.loads(json_str2)
print(f"dict2:{dict2}, dict2_type:{type(dict2)}")
# 打印
# dict2:{'name': '西园公子', 'salary': '66666'}, dict2_type:
用处:主要用于解码,网络上的 Json 数据,然后转成 Python 的 dict 字典类型,爬虫网络居多。
在网络爬虫中,爬取的网页数据中的一些json数据含有大量的特殊字符串,如果使用 Replace 进行替换的话,效率很低,而且转字典时候,有很多错误。所以需要去除特殊字符串的库,import html
import requests
import html
live_page_html = requests.get(live_content_url, headers=headers, cookies=cookies).text
json_data = html.unescape(live_page_html)
3、json.dump()
参数名
解释
obj
字典
fp
文件句柄
ensure_ascii
设置为False的话,数据会原样写入,设置为True则会编码成ASCII值,其中中文则是编码成 Unicode 值,类似’\xXX\xXX’这种
indent
缩进的空格数,设置为非零值时,一般设置4,比较美观
将字典数据写入 json 文件中:
import json
data = {
'name': '西园公子',
}
with open('data.json', 'w') as f:
json.dump(data, f, ensure_ascii=False, indent=4)
# indent=4是默认以四行缩进,更美观
# ensure_ascii=False 表示
# 注意:json.dump()写入的数据不能是bytes类型,否则会报错
用处:将字典转换并写入到 Json 文件中,已达到生成本地 Json 文件的作用。
4、json.load()
用于读取本地 Json 文件的数据,将其转成 Python 的字典dict类型。
import json
with open('data.json', 'r') as f:
data_dict = json.load(f)
print(f"data_dict:{data_dict},type:{type(data_dict)}")
# 打印
# data_dict:{'name': '西园公子', 'salary': '66666'},type:dict
用处:读取本地 Json 文件中的数据,将数据转换为 Python 的字典格式,供其他函数调用。
总结:
说一下怎么区别这几个函数,按需求来:
如果你是想对本地的一个以 .json 为后缀的 Json 文件,进行读取或者写入的话,那么就用 json.load() 和 json.dump() 。
如果你想将网络上的 Json格式的数据,转为 Python 字典 dict格式 ,又或者是前端和后端之间进行 Json 数据的额传输,那么就需要使用 json.dumps() 和 json.loads()
另外也可以这样记(纯属自己为了好记而虚构的),Python 最先支持对 Json 文件的读取和写入,所以开发出 load、dump,但是后来随着爬虫的火爆,以及 Django、Flask 等框架的兴起,就必须要支持解析 web 端的 Json 数,但是已经有 load 和 dump 了,名字被占用了怎么办?就索性在后面加个 s ,就诞生了 json.dumps() 和 json.loads()。
至于怎么区别 load 和 dump ?就需要理解他的英文单词的意思了。load 是加载的意思,将 json 数据转为 Python 字典格式。 dump是倾倒的意思,将 Python 字典格式转为 Json 格式。
或者看下面的流程图:
总结:
另外关于 load和dump还有很多高级的用法,这边并没有涉及,后面有机会会单独写一篇,下期再见~
python json数组解析_Python基础系列(一)搞懂json数据解析与字典之间的关系相关推荐
- python面试文件操作_python基础-三分钟搞定面试官爱问的【文件操作】
一.使用python读写文本文件 使用Python来读或者写文本需要用到'open'这个关键字,它的作用是打开一个文件并创建一个文件对象. open语法结构: open(file, mode='r', ...
- 大数据入门基础系列之初步认识大数据生态系统圈(博主推荐)
不多说,直接上干货! 之前在微信公众平台里写过 大数据入门基础系列之初步认识hadoop生态系统圈 http://mp.weixin.qq.com/s/KE09U5AbFnEdwht44FGrOA 大 ...
- 十分钟搞懂JSON(JSON对象---JSON字符串---对象 之间的区别)
好记性不如烂笔头,相信我,看了之后你会彻底搞懂JSON 前言:前天被JSON对象,JSON字符串,JAVA对象搞混了,不知道各自代表的意思,我就查了资料,总结为一篇博文. 另外我想List<Us ...
- 一文搞懂JSON.stringify和JSON.parse(五)JSON.parse使用说明
一 JSON.parse特性 JSON.parse()就是将JSON字符串解析成字符串描述的JavaScript值或对象(将JSON数据解析为js原生值),例如: JSON.parse('{}'); ...
- 求python一个类与对象的代码_Python基础系列(五)类和对象,让你更懂你的python代码...
首先,非常感谢各位打开本博文,本博文是Python入门基础系列文章之一,Python目前是非常火的编程工具,其实作为编程不在只是程序员的专利,每一个人在日常的工作中.学习中都会或多或少的要用到一些工具 ...
- python解析json文件案例_Python加载带有注释的Json文件实例
由于json文件不支持注释,所以如果在json文件中标记了注释,则使用python中的json.dump()无法加载该json文件. 本文旨在解决当定义"//"为json注释时,如 ...
- python组合和继承_Python基础系列讲解——继承派生和组合的概念剖析
Python作为一门面向对象的语言,它的面向对象体系中主要存在这么两种关系,一个是"类"和"实例"的关系,另一个是"父类"和"子类 ...
- python 神经网络编程 视频_python基础教程之达叔系列——神经网络编程基础|python基础教程|python入门|python教程...
https://www.xin3721.com/eschool/pythonxin3721/ (1)二分类问题 目标:习得一个分类器,它以图片的特征向量作为输入,然后预测出结果 y 为 1 还是 0 ...
- python爬虫今日头条_python爬虫—分析Ajax请求对json文件爬取今日头条街拍美图
python爬虫-分析Ajax请求对json文件爬取今日头条街拍美图 前言 本次抓取目标是今日头条的街拍美图,爬取完成之后,将每组图片下载到本地并保存到不同文件夹下.下面通过抓取今日头条街拍美图讲解一 ...
最新文章
- 智能指针和内存管理小结
- Oracle数据库分组排序
- 基于 Node.js 平台的web开发框架-----express
- mysql 小数点后几位不足补0初始化
- 学习office add-in
- 数据库不停机导数据方案_如何计算数据停机成本
- 389 find the difference
- 启动报错:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
- LeetCode刷题笔记-回溯法-分割回文串
- idea 搭建flutter 安卓开发环境(因为有idea就不需安装Android Studio)
- wdr7660虚拟服务器设置,TP-Link TL-WDR7660无线桥接怎么设置?
- android相关素材以及网站
- [因果推断] 增益模型(Uplift Model)介绍(三)
- 会java 学c_先学Java再学c会简单点吗?
- 金融相关计算机面试题,银行及其他金融企业笔试和面试经验
- 软件工程 | 第六章 系统集成与测试
- 什么是库尼乌斯(the Cuneus)
- 结合泛函极值_泛函极值及变分法讲义.doc
- C#调用系统蜂鸣,警报声
- win7之下魔兽不能全屏