1. 简介
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。JSON是一种基于键值对的数据结构,与Python中的字典十分类似。Python中的json模块可以将JSON字符串转换为Python中的对象,反之亦然,非常方便。
2. 使用json模块解析JSON字符串
在Python 2.x中,使用json模块可以将JSON字符串转换为Python对象。首先,我们需要将JSON字符串存为一个字符串类型的变量,如下所示:
import json
jsonstr = '{"name": "Jack", "age": 20, "city": "Beijing"}'
2.1 将JSON字符串转为Python中的对象
使用json模块的loads方法可以将JSON字符串转换为Python中的对象,代码如下:
pythonobj = json.loads(jsonstr)
以上代码将jsonstr字符串转换为一个Python字典,即:
{'name': 'Jack', 'city': 'Beijing', 'age': 20}
也可以将JSON字符串转换为Python中的其他对象。例如,如果JSON字符串表示一个列表:
jsonstr = '[{"name": "Jack", "age": 20, "city": "Beijing"}, {"name": "Tom", "age": 22, "city": "Shanghai"}]'
pythonobj = json.loads(jsonstr)
则可以使用json模块将其转换为Python中的列表:
[
{'name': 'Jack', 'city': 'Beijing', 'age': 20},
{'name': 'Tom', 'city': 'Shanghai', 'age': 22}
]
可以看到,json.loads方法也支持将包含多个对象的JSON字符串转换为Python中的列表。
2.2 JSON字符串中的转义字符
在JSON字符串中可能会出现一些特殊的字符,需要使用反斜杠进行转义。例如,如果要在JSON字符串中表示一个换行符,可以使用\n进行转义。如果JSON字符串中的一个键值对表示的是一个字符串,而该字符串中也含有特殊字符,那么也需要使用反斜杠进行转义。例如:
jsonstr = '{"name": "Jack\\nTom", "description": "He said \\"Hello, world!\\""}'
pythonobj = json.loads(jsonstr)
以上代码中,字符串"Jack\nTom"中的\n表示一个换行符,字符串"He said \\"Hello, world!\\""中的两个反斜杠分别用于转义双引号和用于转义特殊字符的反斜杠。
2.3 处理JSON中的空值
在JSON中可以使用null表示空值。在Python中,我们可以使用None表示空值。当使用json模块将JSON字符串转换为Python对象时,null会被转换成None。
jsonstr = '{"name": null}'
pythonobj = json.loads(jsonstr)
print(pythonobj) # {'name': None}
2.4 注意事项
在使用json模块将JSON字符串转换为Python对象时,需要注意以下几点:
JSON字符串中的键名必须上引号,即必须是双引号。
JSON字符串必须用字符串类型的变量存储。
JSON字符串中的任何对象,包括键名、键值、数组、对象,都必须严格遵循JSON的语法。
注意:如果JSON字符串的语法不正确,使用json模块解析时会抛出异常。
3. 使用json模块将Python对象转换为JSON字符串
使用json模块,我们不仅可以将JSON字符串转换为Python中的对象,还可以将Python中的对象转换为JSON字符串。在Python 2.x中,我们可以使用json模块的dumps方法将Python对象转换为JSON字符串。如下所示:
pythonobj = {'name': 'Jack', 'age': 20, 'city': 'Beijing'}
jsonstr = json.dumps(pythonobj)
以上代码将Python字典对象转换为JSON字符串:
{"name": "Jack", "city": "Beijing", "age": 20}
如果要定制JSON字符串的格式,可以通过传递参数来实现。例如,设置缩进(indent)、排序(sort_keys)等参数,可以将JSON字符串格式化为更易读的方式。
pythonobj = {'name': 'Jack', 'age': 20, 'city': 'Beijing'}
jsonstr = json.dumps(pythonobj, indent=4, sort_keys=True)
以上代码将Python字典对象转换为缩进为4个空格、按键名排序后的JSON字符串:
{
"age": 20,
"city": "Beijing",
"name": "Jack"
}
4. 实例演示
下面是一个完整的示例代码,演示了如何使用json模块将JSON字符串转换为Python对象,并将Python对象转换为JSON字符串。
import json
jsonstr = '{"name": "Jack", "age": 20, "city": "Beijing"}'
pythonobj = json.loads(jsonstr)
print("从JSON字符串转换为Python对象:")
print(pythonobj)
jsonstr2 = json.dumps(pythonobj, indent=4, sort_keys=True)
print("\n从Python对象转换为JSON字符串:")
print(jsonstr2)
运行以上代码,将输出如下结果:
{
"age": 20,
"city": "Beijing",
"name": "Jack"
}
5. 总结
使用Python的json模块,我们可以很方便地将JSON字符串转换为Python中的对象,也可以将Python中的对象转换为JSON字符串。这在实际开发中非常常见。需要注意的是,从JSON字符串转换为Python对象时,需要确保JSON字符串的语法正确,否则会抛出异常。