1、Python中JSON
Python有一个json
的内置程序包,可用于处理JSON数据。
例如:
导入json模块:
import json
2、解析JSON—从JSON转换为Python对象
如有JSON字符串,则可以使用json.loads()
方法进行解析。
结果将是一个Python字典。
例如:
从JSON转换为Python:
import json x = '{ "name":"cjavapy", "age":3, "city":"china"}' # 解析 x: y = json.loads(x) print(y["name"])
3、从Python对象转换成JSON
如有Python对象,则可以使用json.dumps()
方法将其转换为JSON字符串。
例如:
从Python对象转换为JSON:
import json # a Python object (dict):x = '{ "name":"cjavapy", "age":3, "city":"china"}'
# convert into JSON: y = json.dumps(x) #结果是 JSON string: print(y)
下列类型可以转换Python对象成JSON字符串:
- dict
- list
- tuple
- string
- int
- float
- True
- False
- None
例如:
将Python对象转换为JSON字符串,并输出值:
import json print(json.dumps({"name": "cjavapy", "age": 3})) print(json.dumps(["python", "cjavapy"])) print(json.dumps(("python", "cjavapy"))) print(json.dumps("hello")) print(json.dumps(42)) print(json.dumps(31.76)) print(json.dumps(True)) print(json.dumps(False)) print(json.dumps(None))
从Python对象转换为JSON时,Python对象将转换为等效的JSON(JavaScript):
Python | JSON |
dict | Object |
list | Array |
tuple | Array |
str | String |
int | Number |
float | Number |
True | true |
False | false |
None | null |
例如:
转换包含所有合法数据类型的Python对象:
import json x = { "name": "python", "age": 20, "married": True, "divorced": False, "children": ("c","python"), "pets": None, "langs": [ {"model": "java", "year": 5}, {"model": "python", "year": 6} ] } print(json.dumps(x))
4、格式化json.dumps()生成的JSON字符串
上面的示例显示了一个JSON字符串,但是它不是很容易阅读,没有缩进和换行符。
json.dumps()
方法有一些参数,以便更容易地读取结果:
例如:
使用indent
参数定义缩进数量:
json.dumps(x, indent=4)
还可以定义分隔符,默认值为(", ", ": "),这意味着使用逗号和空格分隔每个对象,并使用冒号和空格分隔键和值:
例如:
使用separators
参数更改默认的分隔符:
json.dumps(x, indent=4, separators=(". ", " = "))
5、对json.dumps()结果排序
json.dumps()
方法有对结果中的键进行排序的参数:
例如:
使用sort_keys
参数指定是否对结果进行排序:
json.dumps(x, indent=4, sort_keys=True)
6、使用第三方库:Demjson
Demjson 是 python 的第三方模块库,可用于编码和解码 JSON 数据,包含了 JSONLint 的格式化及校验功能。
Github 地址:https://github.com/dmeranda/demjson
官方地址:http://deron.meranda.us/python/demjson/
1)环境配置
在使用 Demjson 编码或解码 JSON 数据前,我们需要先安装 Demjson 模块。本教程我们会下载 Demjson 并安装:
tar -xvzf demjson-2.2.3.tar.gz
cd demjson-2.2.3
python setup.py install
更多安装介绍文档:http://deron.meranda.us/python/demjson/install
2)JSON 函数
函数 | 描述 |
---|---|
encode | 将 Python 对象编码成 JSON 字符串 |
decode | 将已编码的 JSON 字符串解码为 Python 对象 |
3)encode使用
Python encode()
函数用于将 Python 对象编码成 JSON 字符串。
语法
demjson.encode(self, obj, nest_level=0)
以下实例将数组编码为 JSON 格式数据:
#!/usr/bin/python import demjson 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}]
4)decode使用
Python 可以使用 demjson.decode()
函数解码 JSON 数据。该函数返回 Python 字段的数据类型。
语法
demjson.decode(self, txt)
以下实例展示了Python 如何解码 JSON 对象:
#!/usr/bin/python import demjson json = '{"a":1,"b":2,"c":3,"d":4,"e":5}'; text = demjson.decode(json) print(text)
以上代码执行结果为:
{u'a':1, u'c':3, u'b':2, u'e':5, u'd':4}
7、异常处理与验证
在处理JSON数据时,可能会遇到格式错误或者缺少预期的字段等情况。可以使用 try-except
结构来捕获可能的异常,或者使用 jsonschema
等库来进行JSON数据的验证。
json_str = '{"name": "John", "age": 30, "city": "New York"' try: python_obj = json.loads(json_str) except json.JSONDecodeError as e: print(f"JSON decoding error: {e}") # 使用 jsonschema 进行数据验证 from jsonschema import validate schema = { "type": "object", "properties": { "name": {"type": "string"}, "age": {"type": "number"}, "city": {"type": "string"} }, "required": ["name", "age", "city"] } try: validate(python_obj, schema) print("JSON data is valid.") except Exception as e: print(f"JSON validation error: {e}")