python json添加元素_Python 操作 json 数据

1. json 数据

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

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

例如:

{

"name": "Felix",

"age": 18,

"hobby": ["运动","妹子"],

"friends": [

{

"name": "刘德华"

},

{

"name": "梁朝伟"

}

]

}

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

2. python 操作 json 文件

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

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

2.1 json 反序列化为 python

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

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

接收一个 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}

{'name': 'Felix', 'age': 18} json.load(fb)

有时候需要从 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': '梁朝伟'}]}

2.2 python 序列化为 json

与反序列化类似,序列化 json 模块也提供了两个对应的函数json.dumps(obj,ensure_ascii=True,indent=None,sort_keys=False)

将一个 python 对象序列化为一个 json 格式的字符串。obj:python 对象

ensure_ascii: 默认为 True,输出保证将所有输入的非 ASCII 字符转义。如果 ensure_ascii 是 false,这些字符会原样输出。

indent:一个非负整数或者字符串,JSON 数组元素和对象成员会被美化输出为该值指定的缩进等级。如果缩进等级为零、负数或者 "",则只会添加换行符。None``(默认值)选择最紧凑的表达。使用一个正整数会让每一层缩进同样数量的空格。如果 *indent* 是一个字符串(比如 ``"\t"),那个字符串会被用于缩进每一层。

sort_keys:为 True(more 为 False),表示字典的输出会以键的顺序排序。

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"

}json.dump(obj,fb,ensure_ascii=True,indent=None,sort_keys=False)

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

其他参数同 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,json添加元素)