Python 2.x 中如何使用json模块将JSON字符串转换为Python对象

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字符串的语法正确,否则会抛出异常。

后端开发标签