Skip to content

JSON

JSON是一种用于数据交换与存储的数据类型, 是一种用JavaScript对象格式编写的文本,Python内置的json模块可以用于操作json格式的数据

import json


JSON字符串转Python对象

使用json.loads()把字符串类型的json数据转为Python类型

x = '''
    {
        "name":"Leon",
        "age":18,
        "city":"New York"
    }
'''

y = json.loads(x)
print(type(y))            # <class 'dict'>
print(y['age'])           # 18
print(type(y['age']))     # int

Python对象转JSON字符串

loads

使用json.dump()把Python类型的数据转为json字符串

dic = {
    "email":"beeplux.gmail.com",
    "phone":"+86 188 9999 0000"
}

dic_json = json.dumps(dic)
print(type(dic_json))
print(dic_json)

Python有以下数据类型的对象可以转为json字符串, 它们会映射为 JavaScript / JSON 中对应的数据类型:

  • dict
  • list
  • tuple
  • string
  • int
  • float
  • True
  • False
  • None
print(json.dumps({"name": "John", "age": 30}))  # {"name": "John", "age": 30}
print(json.dumps(["apple", "bananas"]))         # ["apple", "bananas"]
print(json.dumps(("apple", "bananas")))         # ["apple", "bananas"]
print(json.dumps("hello"))                      # "hello"
print(json.dumps(42))                           # 42
print(json.dumps(31.76))                        # 31.76
print(json.dumps(True))                         # true
print(json.dumps(False))                        # false
print(json.dumps(None))                         # null

指定缩进

使用indent参数让json字符串更容易阅读

dic = {
    "email":"beeplux.gmail.com",
    "phone":"+86 188 9999 0000"
}

dic_json = json.dumps(dic, indent=4)

# output
# {
#     "email": "beeplux.gmail.com",
#     "phone": "+86 188 9999 0000"
# }

指定分隔符

dumps方法默认使用分割每个对象, 使用分割键和值, 可以使用seprators参数指定分隔符

dic_json = json.dumps(dic, indent=4, separators=(".", " = "))
print(type(dic_json))
print(dic_json)


#output
# {
#     "email" = "beeplux.gmail.com".
#     "phone" = "+86 188 9999 0000"
# }

排序

可以把dumps()中的sort_keys设置为True让转出的json字符串按照 key 的字典序(lexicographical order)排序,既是为了方便阅读, 也是为了让输出的结果更加稳定

info = {
    "name4": "Zara",
    "name2": "Cindy",
    "name1": "Leon",
    "name3": "Bob"
}

info_json = json.dumps(info, indent=4)
info_json_sorted = json.dumps(info, indent=4, sort_keys=True)

print(info_json)
print(info_json_sorted)


# output
{
    "name4": "Zara",
    "name2": "Cindy",
    "name1": "Leon",
    "name3": "Bob"
}
{
    "name1": "Leon",
    "name2": "Cindy",
    "name3": "Bob",
    "name4": "Zara"
}