- 1. 综述
- 2. JSON 语法
- 2.1 JSON 对象
- 2.2 JSON 数组
- 3. Python JSON
- 3.1 自带库`json`
- 3.2 Python 原始类型与JSON 类型的对比
- 3.3 第三方库`Demjson`
- *. 参考
JSON: JavaScript Object Notation(JavaScript 对象表示法),是轻量级的存储和交换文本信息的语法,类似 XML . 特点是纯文本、层级结构、使用数组。
2. JSON 语法JSON 语法是 JavaScript 语法的子集。
- 数据保存在 名称/值对(健值对)中
- 数据由逗号分隔
- 花括号{}保存对象
- 中括号 [] 保存数组,数组可以包含多个对象
数据在 名称/值对(健值对)中:JSON 数据的书写格式如下
key : value 例如: "name" : "JSON 语法"
JSON 名称/值对中的值可以是:
- 数字(整数或浮点数)
- 字符串(在双引号中)
- 逻辑值(true 或 false)
- 数组(在中括号中)
- 对象(在花括号中)
- null
JSON 对象在花括号 {} 中书写:
{key1 : value1, key2 : value2, ... keyN : valueN }
例如:
{ "name":"JSON 对象" , "age":80 }
2.2 JSON 数组
JSON 数组在中括号 []中书写。JSON 中数组值必须是合法的 JSON 数据类型(字符串, 数字, 对象, 数组(嵌套), 布尔值或 null)。
[ "Google", "Runoob", "Taobao" ]
JSON 对象中的数组:
{
"name":"网站",
"num":3,
"sites":[ "Google", "Runoob", "Taobao" ]
}
- 在访问数组元素时,可使用索引、for循环的方法实现
- 修改数组元素可使用索引实现:
myObj.sites[1] = "Github";
- 删除数组元素使用delet关键字实现:
delete myObj.sites[1];3. Python JSON
3.1 自带库json
首先在Python 中应用JSON 的库为json,是Python 自带的,不需另外下载:
import json
- 函数json.dumps:将 Python 对象编码成 JSON 字符串
- 函数json.loads: 将已编码的 JSON 字符串解码为 Python 对象
- 函数json.dumps:
# json.dumps 的函数原型如下: json.dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, encoding="utf-8", default=None, sort_keys=False, **kw) # 其中: # obj:要转化成json的对象 # sort_keys =True:是告诉编码器按照字典排序(a到z)输出。如果是字典类型的python对象,就把关键字按照字典排序。 # indent:参数根据数据格式缩进显示,读起来更加清晰。 # separators:是分隔符的意思,参数意思分别为不同dict项之间的分隔符和dict项内key和value之间的分隔符,把:和,后面的空格都除去了。 # skipkeys:默认值是False,如果dict的keys内的数据不是python的基本类型(str,unicode,int,long,float,bool,None),设置为False时,就会报TypeError的错误。此时设置成True,则会跳过这类key 。 # ensure_ascii=True:默认输出ASCLL码,如果把这个该成False,就可以输出中文。 # check_circular:如果check_circular为false,则跳过对容器类型的循环引用检查,循环引用将导致溢出错误(或更糟的情况)。 # allow_nan:如果allow_nan为假,则ValueError将序列化超出范围的浮点值(nan、inf、-inf),严格遵守JSON规范,而不是使用JavaScript等价值(nan、Infinity、-Infinity)。 # default:default(obj)是一个函数,它应该返回一个可序列化的obj版本或引发类型错误。默认值只会引发类型错误。
- 例程:
import json
if __name__ == '__main__':
x = {'name': 'zhangsan', 'age': 19, 'city': 'guangzhou'}# 注意逗号后面有空格
# 用dumps将python 字典编码成json字符串
y = json.dumps(x)
print(y)
i = json.dumps(x, separators=(',', ':')) # 逗号后面的空格被去掉
print(i)
# 输出结果
{"name": "zhangsan", "age": 19, "city": "guangzhou"}
{"name":"zhangsan","age":19,"city":"guangzhou"}
- 函数json.loads:
# 函数原型: json.loads(s[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, **kw]]]]]]]])
- 例程:
import json
if __name__ == '__main__':
x = {'name': 'zhangsan', 'age': 19, 'city': 'guangzhou'}# 注意逗号后面有空格
# 用dumps将python 字典编码成json字符串
y = json.dumps(x)
print(y)
# 用loads将json 数据解码成python 数据
text = json.loads(y)
print(text)
# 输出结果:
{"name": "zhangsan", "age": 19, "city": "guangzhou"}
{'name': 'zhangsan', 'age': 19, 'city': 'guangzhou'}
3.2 Python 原始类型与JSON 类型的对比
3.3 第三方库Demjson
Github 地址:https://github.com/dmeranda/demjson
官方地址:http://deron.meranda.us/python/demjson/
- 函数encode:将 Python 对象编码成 JSON 字符串
- 函数decode:将已编码的 JSON 字符串解码为 Python 对象
- 函数encode:
# 函数原型: demjson.encode(self, obj, nest_level=0)
- 例程:
import demjson
if __name__ == '__main__':
data = [{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}]
json = demjson.encode(data)
print(json)
# 输出结果:
[{"a":1,"b":2,"c":3,"d":4,"e":5}]
- 函数decode:
# 函数原型: demjson.decode(self, txt)
- 例程
import demjson
if __name__ == '__main__':
json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
text = demjson.decode(json)
print(text)
# 运行结果:
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
*. 参考
w3cschool
JSON官网
JSON中文官网



