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.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} <class 'str'> {'name': 'Felix', 'age': 18} <class 'dict'> 
  • 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': '梁朝伟'}]} <class 'dict'> 

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)

本文由柠檬班心蓝老师原创,转载需注明出处!

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐