JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。它基于JavaScript的一个子集,但JSON是独立于语言的,很多编程语言都支持JSON格式的数据的生成和解析。
JSON的特点包括:
- 文本格式: JSON是纯文本,可以被任何编程语言读取和生成。
- 结构简单: 使用键值对存储数据,结构清晰,易于理解。
- 易于解析: 大多数编程语言都有现成的库来解析JSON数据,将其转换为本地对象。
- 易于传输: 由于是文本格式,JSON数据可以很容易地通过HTTP等协议传输。
- 语言无关: 虽然JSON源自JavaScript,但它是独立于语言的,几乎所有的现代编程语言都支持JSON。
JSON数据的基本类型包括:
- 字符串: 用双引号括起来的文本。
- 数字: 没有引号的数值。
- 布尔值:
True
或False
。 - 数组: 用方括号括起来的值序列,例如
["apple", "banana", "cherry"]
。 - 对象: 用大括号括起来的键值对集合,例如
{"name": "Lilian", "age": 21}
。 - null: 表示空值。
JSON对象示例:
{
"name": "Lilian",
"age": 21,
"isEmployed": False,
"skills": ["math", "music", "web crawler"],
"address": {
"street": "Num.360, JinNiu District",
"city": "CD",
"province": "SC"
}
}
python中有自带的json标准库能处理json数据,提供的基本功能有:
- 序列化(编码): 将python对象转换为JSON格式的字符串。
json.dumps(obj)
: 将python对象obj转换成json字符串。json.dump(obj)
: 将python对象obj转换为json字符串并写入到文件中。
- 反序列化(解码): 将JSON格式的字符串转换回python对象。
json.loads(json_str)
: 将JSON字符串json_str转换为python对象。json.load(file)
: 从文件读取JSON字符串并将其转换为python对象。
示例代码:
import json
# python中JSON对象会被解析成字典格式,数组被解析为列表,字符串解析为字符串str,数字解析为整数int或浮点数float,布尔值解析为布尔值,null解析为None
# 字符串中的key需要加上双引号,不能用单引号
str_ = '{"name": "战狼3"}'
print(type(str_)) # <class 'str'>
print('--------str to obj---------')
obj = json.loads(str_)
print(type(obj)) # <class 'dict'>
print('--------obj to str---------')
tmp_str = json.dumps(obj, ensure_ascii=False)
print(tmp_str) # {"name": "战狼3"}
print(type(tmp_str)) # <class 'str'>
print('---------obj to file---------')
json.dump(obj, open('json.txt', 'w', encoding='utf8'), ensure_ascii=False)
print('---------file to obj---------')
obj2 = json.load(open('json.txt', 'r', encoding='utf8'))
print(obj2) # {"name": "战狼3"}
print(type(obj2)) # <class 'dict'>
除了基本功能,json还支持自定义编码器和解码器来处理特定类型的转换,JSONDecoder类用于自定义解码JSON数据,JSONEncoder类用于自定义编码python对象到JSON数据。
还提供了异常处理机制: json.JSONDecodeError。
详细信息查看python官网:https://docs.python.org/3.12/library/json.html#basic-usage
json在线解析网站:http://www.json.cn/#