JSON解析-python实现
- 2020 年 1 月 3 日
- 筆記
本文从以下几个方面进行讨论: 1. JSON的基本概念 2. python解析JSON 3. 参考
1. JSON基本概念
1.1 JSON概念及特点
- JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)
- JSON 是轻量级的文本数据交换格式
- JSON 独立于语言,JSON 使用 JavaScript 语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。
- JSON 具有自我描述性,更易理解
JSON 比 XML 更小、更快,更易解析。具体的JSON和XML的比较,可以参考博客: JSON与XML的区别比较
1.2 JSON语法规则
JSON 语法是 JavaScript 对象表示法语法的子集。
- 数据在名称/值对中
- 数据由逗号分隔
- 花括号保存对象
- 方括号保存数组
JSON的数据保存在 名称/值 对中。 名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值,例如:
“Name” : “SunPro”
JSON的值的类型有:
- 数字(整数或浮点数)
- 字符串(在双引号中)
- 逻辑值(true 或 false)
- 数组(在方括号中)
- 对象(在花括号中)
- null
看一个JSON和XML的示例: 表示中国部分省市数据如下
{ "name": "中国", "province": [{ "name": "黑龙江", "cities": { "city": ["哈尔滨", "大庆"] } }, { "name": "广东", "cities": { "city": ["广州", "深圳", "珠海"] } }, { "name": "中国台湾", "cities": { "city": ["台北", "高雄"] } }, { "name": "新疆", "cities": { "city": ["乌鲁木齐"] } }] }
对应的XML文件
<?xml version="1.0" encoding="utf-8"?> <country> <name>中国</name> <province> <name>黑龙江</name> <cities> <city>哈尔滨</city> <city>大庆</city> </cities> </province> <province> <name>广东</name> <cities> <city>广州</city> <city>深圳</city> <city>珠海</city> </cities> </province> <province> <name>中国台湾</name> <cities> <city>台北</city> <city>高雄</city> </cities> </province> <province> <name>新疆</name> <cities> <city>乌鲁木齐</city> </cities> </province> </country>
可以看到,JSON 简单的语法格式和清晰的层次结构明显要比 XML 容易阅读,并且在数据交换方面,由于 JSON 所使用的字符要比 XML 少得多,可以大大得节约传输数据所占用得带宽。
2. python 解析JSON
python通过json库来解析JSON 使用 JSON 函数需要导入 json 库:import json。
2.1 json函数
函数 |
描述 |
---|---|
json.dumps() |
将 Python 对象编码成 JSON 字符串 |
json.loads() |
将已编码的 JSON 字符串解码为 Python 对象 |
2.2 python和JSON解析过程中的对应关系
Decoding:
JSON |
Python |
---|---|
object |
dict |
array |
list |
string |
str |
number (int) |
int |
number (real) |
float |
true |
True |
false |
False |
null |
None |
Encoding:
Python |
JSON |
---|---|
dict |
object |
list, tuple |
array |
str |
string |
int, float, int- & float-derived Enums |
number |
True |
true |
False |
false |
None |
null |
看一下实例:
import json data = [ { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ] jsonstr = json.dumps(data, sort_keys=True, indent=4, separators=(',', ': ')) #格式化输出 print(jsonstr) print(type(jsonstr)) jsonDe = json.loads(jsonstr) print(jsonDe) print(type(jsonDe))
json解析也可以使用python json模块封装的json.JSONDecoder 和 json.JSONEncoder 类 详见 https://docs.python.org/3.5/library/json.html 也可以使用第三方库:Demjson Demjson 是 python 的第三方模块库,可用于编码和解码 JSON 数据,包含了 JSONLint 的格式化及校验功能。 Github 地址:https://github.com/dmeranda/demjson 官方地址:http://deron.meranda.us/python/demjson/