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文件的更多相关文章

  1. python 读写json文件(dump, load),以及对json格式的数据处理(dumps, loads)

    JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. 1.json.dumps()和json.loads()是json ...

  2. iOS 如何用JSONKit读写JSON文件

     如何用JSONKit读写JSON文件 分类: ios2013-04-20 12:46 510人阅读 评论(0) 收藏 举报 JSON文件格式简单,使用方便,值得一用. 目前已经有多个库支持Json文 ...

  3. python3读写csv文件

    python读取CSV文件   python中有一个读写csv文件的包,直接import csv即可.利用这个python包可以很方便对csv文件进行操作,一些简单的用法如下. 1. 读文件 csv_ ...

  4. python 读写 json文件

    json的优势: 1. 数据体积方面. JSON相对于XML来讲,数据的体积小,传递的速度更快些. 2. 传输速度方面. JSON的速度要远远快于XML 3. 数据格式 数据格式比较简单, 易于读写, ...

  5. java如何读写json文件

    在实际项目开发中,有时会遇到一些全局的配置缓存,最好的做法是配置redis数据库作为数据缓存,而当未有配置redis服务器时,读取静态资源文件(如xml.json等)也是一种实现方式,但是这有一个弊端 ...

  6. node读写json文件(进阶)

    该方法可用于修改配置文件,直接上代码 fs.readFile('test1.json','utf8',function (err, data) { if(err) console.log(err); ...

  7. C++通过jsoncpp类库读写JSON文件-json用法详解

    介绍: JSON 是常用的数据的一种格式,各个语言或多或少都会用的JSON格式. JSON是一个轻量级的数据定义格式,比起XML易学易用,而扩展功能不比XML差多少,用之进行数据交换是一个很好的选择. ...

  8. Unity C# 使用JsonUtility读写Json文件

    本文原创,转载请注明出处:http://www.cnblogs.com/AdvancePikachu/p/7146731.html 今天,为大家分享一下unity上的Json序列化,应该一说到这个词语 ...

  9. Python3之json文件操作

    json函数 使用json函数之前,首先需要导入json模块,import json 1).json.dumps()函数 该函数是将 Python 对象编码成 JSON 字符串,例如: import ...

随机推荐

  1. 验证码识别的免费 OCR

    在做接口自动化以及爬虫的过程中,验证码一般是个很烦的存在,其实大厂们已经做好了一些 OCR 供使用,这里介绍一下百度 OCR 的使用方法. 注册并生成应用 1.注册一个百度智能云账号:http://a ...

  2. PL/SQL Developer的错误提示弹框的文本显示乱码问题

    问题:Windows中文环境下,PL/SQL Developer的错误提示弹框文本为乱码,如下: 解决过程:1.使用SELECT * FROM v$nls_parameters;查询得知服务器的字符集 ...

  3. asp.net类似于js中的setTimeOut()的函数作用?

    asp.net类似于js中的setTimeOut()的函数作用? 插入这行即可,定时2秒,再运行下一步: System.Threading.Thread.Sleep(); 加个随机数 Random r ...

  4. 改善C#程序的方法

    写在开头: http://www.cnblogs.com/luminji    157个建议_勘误表 一:属性 属性和方法一样.也可以是virtual和abstract. 条款2:运行时常量(read ...

  5. MarkDown 语法大全查询

    目录 1. 斜体和粗体 2. 分级标题 3. 超链接 3.1. 行内式 3.2. 参考式 3.3. 自动链接 4. 锚点 5. 列表 5.1. 无序列表 5.2. 有序列表 5.3. 定义型列表 5. ...

  6. 使用的jQuery加载源的优势【问题】

    [问题]使用的jQuery加载源的优势? [答案]许多用户在访问其他站点时,已经从谷歌或微软加载过 jQuery.所有结果是,当他们访问您的站点时,会从缓存中加载 jQuery,这样可以减少加载时间. ...

  7. 离线yum源挂载及yum服务器搭建

    在进行现网环境搭建的时候,绝大多数情况下,centos或redhat(以下以centos为例)服务器是跟公网隔离的,因此需要找一台服务器挂载自己的yum源. 一.离线yum源包的制作 离线yum源可以 ...

  8. STUN/TURN服务器搭建

    目录 STUN/TURN服务器搭建 编译安装 配置使用 添加用户 启动server 测试 开机启动 参考 STUN/TURN服务器搭建 编译安装 编译安装 OpenSSL: sudo apt-get ...

  9. How to resolve emulator cannot be launched issue by command line

    Issue: Resolution: 1. Open the system variables, find the Path and edit it, add below item : C:\User ...

  10. synchronized 和 volatile 的区别是什么?(未完成)

    synchronized 和 volatile 的区别是什么?(未完成)