Python3读写JSON文件
JSON简介
JSON(JavaScript Object Notation)即JavaScript对象表示法,一种轻量级,通用的文本数据格式。
JSON语法支持对象(Object),数组(Array),字符串,数字(int/float)以及true/false和null。
JSON拥有严格的格式,主要格式如下:
- 只能用双引号,不能用单引号
- 元素之间用逗号隔开,最后一个元素不能有逗号
- 不支持注释
- 中文等特殊字符传输时应确保转为ASCII码(\uXXX格式)
- 支持多层嵌套Object或Array
示例格式,文件demo.json:
{
"name": "Cactus",
"age": 18,
"skills": ["Python", "Java", "Go", "NodeJS"],
"has_blog": true,
"gf": null
}
JSON与Python数据类型的对应关系
JSON和Python中的字典等类型一一对应:
JSON | Python |
---|---|
Object | 字典 |
Array | 列表 |
字符串 | 字符串 |
数字 | 数字(int/float) |
true/false | True/False |
null | Null |
注意:在Python中, JSON一般指符合JSON语法格式的字符串,实际上是一个字符串,单行或者多行。
JSON字符串与Python字典的相互转换
为什么要相互转换,JSON是字符串,方便存储传输,不方便提取值;字典是内存中的数据结构,取值方便,不方便传输和存储
使用Python自带的json包可以完成字典与JSON字符串的相互转换
- json.dumps(字典):将字典转为JSON字符串
- json.loads(JSON字符串):将JSON字符串转为字典,如果字符串不是合法的JSON格式,会报JSONDecodeError
示例1,字典转JSON字符串
import json
dict_var = {
'name': 'Cactus',
'age': 18,
'skills': ['Python', 'Java', 'Go', 'NodeJS'],
'has_blog': True,
'gf': None
}
print(json.dumps(dict_var))
print(json.dumps(dict_var, indent=2,sort_keys=True, ensure_ascii=False))
json.dumps()支持参数,indent为多行缩进空格数,sort_keys为是否按键排序,ensure_ascii=False为不确保ascii,及不将中文等特殊字符转为\uXXX等
显示结果:
{"name": "Cactus", "age": 18, "skills": ["Python", "Java", "Go", "NodeJS"], "has_blog": true, "gf": null}
{
"age": 18,
"gf": null,
"has_blog": true,
"name": "Cactus",
"skills": [
"Python",
"Java",
"Go",
"NodeJS"
]
}
示例2,JSON字符串->字典
import json
json_str = '''{
"name": "Cactus",
"age": 18,
"skills": ["Python", "Java", "Go", "NodeJS"],
"has_blog": true,
"gf": null
}'''
print(json.loads(json_str))
显示结果:
{'name': 'Cactus', 'age': 18, 'skills': ['Python', 'Java', 'Go', 'NodeJS'], 'has_blog': True, 'gf': None}
JSON文件与字典的相互转换
另外也可以直接将字典保存为JSON文件或从JSON文件转为字典
- json.dump(字典, f):将字典转为JSON文件(句柄)
- json.loads(f):将打开的JSON文件句柄转为字典
示例3:字典->JSON文件
import json
dict_var = {
'name': 'Cactus',
'age': 18,
'skills': ['Python', 'Java', 'Go', 'NodeJS'],
'has_blog': True,
'gf': None
}
with open("demo2.json", "w", encoding='utf-8') as f:
# json.dump(dict_var, f) # 写为一行
json.dump(dict_var, f,indent=2,sort_keys=True, ensure_ascii=False) # 写为多行
文件demo2.json结果:
{
"age": 18,
"gf": null,
"has_blog": true,
"name": "Cactus",
"skills": [
"Python",
"Java",
"Go",
"NodeJS"
]
}
示例4: JSON文件->字典
import json
with open("demo2.json", encoding="utf-8") as f:
data = json.load(f)
pritn(data)
显示结果:
{'age': 18, 'gf': None, 'has_blog': True, 'name': 'Cactus', 'skills': ['Python', 'Java', 'Go', 'NodeJS']}
注意:字典转为JSON时,只支持嵌套字典、列表、字符串、数字、True/False/None等,不支持日期对象以及Python的其他对象
需要进行相互转换的可以参考:https://python3-cookbook.readthedocs.io/zh_CN/latest/c06/p02_read-write_json_data.html
解析复杂嵌套JSON格式,请使用JSONPath
Python3读写JSON文件的更多相关文章
- python 读写json文件(dump, load),以及对json格式的数据处理(dumps, loads)
JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. 1.json.dumps()和json.loads()是json ...
- iOS 如何用JSONKit读写JSON文件
如何用JSONKit读写JSON文件 分类: ios2013-04-20 12:46 510人阅读 评论(0) 收藏 举报 JSON文件格式简单,使用方便,值得一用. 目前已经有多个库支持Json文 ...
- python3读写csv文件
python读取CSV文件 python中有一个读写csv文件的包,直接import csv即可.利用这个python包可以很方便对csv文件进行操作,一些简单的用法如下. 1. 读文件 csv_ ...
- python 读写 json文件
json的优势: 1. 数据体积方面. JSON相对于XML来讲,数据的体积小,传递的速度更快些. 2. 传输速度方面. JSON的速度要远远快于XML 3. 数据格式 数据格式比较简单, 易于读写, ...
- java如何读写json文件
在实际项目开发中,有时会遇到一些全局的配置缓存,最好的做法是配置redis数据库作为数据缓存,而当未有配置redis服务器时,读取静态资源文件(如xml.json等)也是一种实现方式,但是这有一个弊端 ...
- node读写json文件(进阶)
该方法可用于修改配置文件,直接上代码 fs.readFile('test1.json','utf8',function (err, data) { if(err) console.log(err); ...
- C++通过jsoncpp类库读写JSON文件-json用法详解
介绍: JSON 是常用的数据的一种格式,各个语言或多或少都会用的JSON格式. JSON是一个轻量级的数据定义格式,比起XML易学易用,而扩展功能不比XML差多少,用之进行数据交换是一个很好的选择. ...
- Unity C# 使用JsonUtility读写Json文件
本文原创,转载请注明出处:http://www.cnblogs.com/AdvancePikachu/p/7146731.html 今天,为大家分享一下unity上的Json序列化,应该一说到这个词语 ...
- Python3之json文件操作
json函数 使用json函数之前,首先需要导入json模块,import json 1).json.dumps()函数 该函数是将 Python 对象编码成 JSON 字符串,例如: import ...
随机推荐
- 普通表分区改造_rename方式
一.需求 配合开发人员,对业务临时表进行分区改造(业务认为的临时表,只需要保留近一月数据,并非oracle临时表类型) 二.如下记录完整过程 开发需求 TS_PM 以time_key分区 .沟通明确方 ...
- Nginx server配置
项目一般都需要前后端的配置,用二级域名把它区分开:首先在nginx.conf:里面加一句话: http{ #这里面有很多其他的配置 如:gzip FastCGI等等 include vhosts/*. ...
- js 三级联动
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...
- shell脚本使用记录
一些比较功能需求比较简单的可以考虑使用shell脚本来写,这样可以方便快捷稳定 1. 读取文件值,根据文件值1 或 0 来开启和关闭某些程序 a. while : do done 是无限循环. b. ...
- 配置vue 多页面
安装vue 1. 全局安装 vue-cli环境 npm install --global vue-cli 2. 创建一个基于webpack模板的新项目 vue init webpack my-proj ...
- Java Web-JSTL
Java Web-JSTL 概念 Java Server Pages Tag Library:JSP标准标签库 是由Apache组织提供的开源.免费JSP标签 用于简化和替换JSP页面上的Java代码 ...
- git基本命令总结
介绍 上一篇博客介绍了git的基本使用方式,建议可以去阅读一下廖雪峰关于git的文章写的十分详细,并且通俗易懂,这篇博客主要是总结上一篇博客中用到的git命令,方便使用查询. git常用命令小结 gi ...
- XML文件解析之DOM解析
XML文件是一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便.基本的解析方式包括DOM解析和SAX解析,具体来说包括DOM解析,SAX解析,DOM4J解 ...
- require.js 加载 js 文件 404 处理(配置无效)
main.js 是 配置文件,data-main 是异步加载,如果在main.js未加载完成的时候,使用了require去加载文件,就会导致配置无效 main.js
- linux设置密钥登录(只允许密钥登录)
一.root用户使用这条命令看看家目录有没有(.ssh文件夹),cd .ssh,如果存在就会进入这个文件夹,不存在就(makedir .ssh),修改.ssh这个文件夹权限(chmod 700 .ss ...