Python JSON

JSON 是用于存储和交换数据的语法。

JSON 是用 JavaScript 对象表示法(JavaScript object notation)编写的文本。


Python 中的 JSON

Python 有一个名为 json 的内置包,可用于处理 JSON 数据。

导入 json 模块:

  1. import json

解析 JSON - 把 JSON 转换为 Python

若有 JSON 字符串,则可以使用 json.loads() 方法对其进行解析。

结果将是 Python 字典。

把 JSON 转换为 Python:

  1. import json
  2. # some JSON:
  3. x = '{ "name":"Bill", "age":63, "city":"Seatle"}'
  4. # parse x:
  5. y = json.loads(x)
  6. # the result is a Python dictionary:
  7. print(y["age"])

把 Python 转换为 JSON

若有 Python 对象,则可以使用 json.dumps() 方法将其转换为 JSON 字符串。

把 Python 转换为 JSON:

  1. import json
  2. # a Python object (dict):
  3. x = {
  4. "name": "Bill",
  5. "age": 63,
  6. "city": "Seatle"
  7. }
  8. # convert into JSON:
  9. y = json.dumps(x)
  10. # the result is a JSON string:
  11. print(y)

您可以把以下类型的 Python 对象转换为 JSON 字符串:

  • dict
  • list
  • tuple
  • string
  • int
  • float
  • True
  • False
  • None

将 Python 对象转换为 JSON 字符串,并打印值:

  1. import json
  2. print(json.dumps({"name": "Bill", "age": 63}))
  3. print(json.dumps(["apple", "bananas"]))
  4. print(json.dumps(("apple", "bananas")))
  5. print(json.dumps("hello"))
  6. print(json.dumps(42))
  7. print(json.dumps(31.76))
  8. print(json.dumps(True))
  9. print(json.dumps(False))
  10. print(json.dumps(None))

当 Python 转换为 JSON 时,Python 对象会被转换为 JSON(JavaScript)等效项:

PythonJSON
dictObject
listArray
tupleArray
strString
intNumber
floatNumber
Truetrue
Falsefalse
Nonenull

转换包含所有合法数据类型的 Python 对象:

  1. import json
  2. x = {
  3. "name": "Bill",
  4. "age": 63,
  5. "married": True,
  6. "divorced": False,
  7. "children": ("Jennifer","Rory","Phoebe"),
  8. "pets": None,
  9. "cars": [
  10. {"model": "Porsche", "mpg": 38.2},
  11. {"model": "BMW M5", "mpg": 26.9}
  12. ]
  13. }
  14. print(json.dumps(x))

格式化结果

上面的实例打印一个 JSON 字符串,但它不是很容易阅读,没有缩进和换行。

json.dumps() 方法提供了令结果更易读的参数:

使用 indent 参数定义缩进数:

  1. import json
  2. x = {
  3. "name": "Bill",
  4. "age": 63,
  5. "married": True,
  6. "divorced": False,
  7. "children": ("Jennifer","Rory","Phoebe"),
  8. "pets": None,
  9. "cars": [
  10. {"model": "Porsche", "mpg": 38.2},
  11. {"model": "BMW M5", "mpg": 26.9}
  12. ]
  13. }
  14. # use four indents to make it easier to read the result:
  15. print(json.dumps(x, indent=4))

还可以定义分隔符,默认值为(", ", ": "),这意味着使用逗号和空格分隔每个对象,使用冒号和空格将键与值分开:

使用 separators 参数来更改默认分隔符:

  1. import json
  2. x = {
  3. "name": "Bill",
  4. "age": 63,
  5. "married": True,
  6. "divorced": False,
  7. "children": ("Jennifer","Rory","Phoebe"),
  8. "pets": None,
  9. "cars": [
  10. {"model": "Porsche", "mpg": 38.2},
  11. {"model": "BMW M5", "mpg": 26.9}
  12. ]
  13. }
  14. # use . and a space to separate objects, and a space, a = and a space to separate keys from their values:
  15. print(json.dumps(x, indent=4, separators=(". ", " = ")))

对结果排序

json.dumps() 方法提供了对结果中的键进行排序的参数:

使用 sort_keys 参数来指定是否应对结果进行排序:

  1. import json
  2. x = {
  3. "name": "Bill",
  4. "age": 63,
  5. "married": True,
  6. "divorced": False,
  7. "children": ("Jennifer","Rory","Phoebe"),
  8. "pets": None,
  9. "cars": [
  10. {"model": "Porsche", "mpg": 38.2},
  11. {"model": "BMW M5", "mpg": 26.9}
  12. ]
  13. }
  14. # sort the result alphabetically by keys:
  15. print(json.dumps(x, indent=4, sort_keys=True))