Python 操作 json 数据

1. json 数据

JSON(JavaScript Object Notation)` 是一种轻量级的数据交换格式,易于阅读和理解。JSON 格式可以对高纬数据进行表达和存储。

JSON 格式通过键值对来表达信息,键是字符串,值可以是:

语法
对象 一对大括号包裹,元素是键值对,键值对用逗号分隔 {key:value}
数组 一对中括号包裹,元素是 JSON 可以表达的所有数据类型,元素之间使用逗号分隔 [value1,value2,value3]
字符串 双引号包裹 "心蓝"
整数 12
浮点数 1.2
布尔型 true,false
null

例如:

{
    "name": "Felix",
    "age": 18,
    "hobby": ["运动","妹子"],
    "friends": [
        {
            "name": "刘德华"
        },
        {
            "name": "梁朝伟"
        }
    ]
}

创建一个名为 xinlan.json 的文本文件,将上面的 json 数据写入文件中。

2. python 操作 json 文件

直观上,JSON 格式和 python 中的对象类似,对应表示关系如下:

JSON PYTHON
对象(object) 字典(dict)
数组(array) 列表(list)
字符串(string) 字符串(str)
整数(int) 整数(int)
实数(float) 实数(float)
true True
false False
null None

直接通过字符串解析 json 文件不是太简单,python 提供了内置 json 模块用来解析 json 文件。

2.1 json 反序列化为 python

python 对象转 json 字符串称为序列化,反之为反序列化。

json 模块提供了两个函数来支持 json 字符串反序列化为一个 python 对象。

接收一个 json 格式的字符串,反序列化一个 python 对象。如果参数 s 的格式不满足 json 格式,抛出 JSONDecodeError 异常。

import json
json_str = '{"name":"Felix","age":18}'
print(json_str, type(json_str))
load_data = json.loads(json_str)
print(load_data, type(load_data))

运行结果:

{"name":"Felix","age":18} <class 'str'>
{'name': 'Felix', 'age': 18} <class 'dict'>

有时候需要从 json 文件中加载数据,这是一个快捷方法。接收一个以读方式打开的 json 文件对象,将文件中的 json 数据反序列化为一个 python 对象。

import json
with open('felix.json','r',encoding='utf-8') as f:
    load_data = json.load(f)
    print(load_data, type(load_data))

运行结果:

{'name': 'Felix', 'age': 18, 'hobby': ['运动', '妹子'], 'friends': [{'name': '刘德华'}, {'name': '梁朝伟'}]} <class 'dict'>

2.2 python 序列化为 json

与反序列化类似,序列化 json 模块也提供了两个对应的函数

import json
data = {
"name": "Felix",
    "age": 18,
    "hobby": ['运动','妹子'],
    "friends": [
        {
            "name": "刘德华"
        },
        {
            "name": "梁朝伟"
        }
    ]
}
json_str = json.dumps(data)
print(json_str)
print(json.dumps(data,ensure_ascii=False))
print(json.dumps(data,ensure_ascii=False,indent=4))
print(json.dumps(data,ensure_ascii=False,indent=4, sort_keys=True))

运行结果:

{"name": "Felix", "age": 18, "hobby": ["\u8fd0\u52a8", "\u59b9\u5b50"], "friends": [{"name": "\u5218\u5fb7\u534e"}, {"name": "\u6881\u671d\u4f1f"}]}
{"name": "Felix", "age": 18, "hobby": ["运动", "妹子"], "friends": [{"name": "刘德华"}, {"name": "梁朝伟"}]}
{
    "name": "Felix",
    "age": 18,
    "hobby": [
        "运动",
        "妹子"
    ],
    "friends": [
        {
            "name": "刘德华"
        },
        {
            "name": "梁朝伟"
        }
    ]
}
{
    "age": 18,
    "friends": [
        {
            "name": "刘德华"
        },
        {
            "name": "梁朝伟"
        }
    ],
    "hobby": [
        "运动",
        "妹子"
    ],
    "name": "Felix"
}

将一个 python 对象序列化为 json 数据后写入一个以 w 模式打开的文件。

其他参数同 json.dumps()

import json
data = {
	"name": "Felix",
    "age": 18,
    "hobby": ['运动','妹子'],
    "friends": [
        {
            "name": "刘德华"
        },
        {
            "name": "梁朝伟"
        }
    ]
}
with open('first.json', 'w', encoding='utf-8') as f:
    json.dump(data,f,ensure_ascii=False,indent=4)
1 操作
877649301 在 2020-11-16 17:49:52 更新了该帖
回帖
请输入回帖内容 ...