Python 操作 json 数据

本贴最后更新于 1501 天前,其中的信息可能已经事过景迁

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)
  • Python
    105 引用 • 237 回帖 • 1 关注
1 操作
877649301 在 2020-11-16 17:49:52 更新了该帖
回帖
请输入回帖内容 ...