如何在 Python 中使用 `json` 模块?

开发 前端
在Python中,json 模块提供了一个非常方便的方法来处理JSON数据。无论是将Python对象转换为JSON格式(序列化),还是将JSON格式的数据解析为Python对象(反序列化),json 模块都能满足你的需求。

在Python中,json 模块提供了一个非常方便的方法来处理JSON数据。无论是将Python对象转换为JSON格式(序列化),还是将JSON格式的数据解析为Python对象(反序列化),json 模块都能满足你的需求。

序列化:从Python对象到JSON

使用 json.dumps()

json.dumps() 函数用于将Python对象转换为JSON格式的字符串。

import json
# Python对象
data = {
    "name": "Alice",
    "age": 25,
    "is_student": False
}
# 将Python对象转换为JSON字符串
json_str = json.dumps(data, ensure_ascii=False)
print("JSON字符串:", json_str)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.

在这个例子中,我们定义了一个包含一些基本信息的字典,并使用 json.dumps() 方法将其转换为JSON格式的字符串。ensure_ascii=False 参数确保非ASCII字符能够正确显示。

写入文件

如果你想要直接将JSON数据写入文件,可以使用 json.dump() 方法:

with open('data.json', 'w', encoding='utf-8') as f:
    json.dump(data, f, ensure_ascii=False, indent=4)
print("数据已写入文件")
  • 1.
  • 2.
  • 3.

这里,indent=4 参数使得输出更加美观易读。

反序列化:从JSON到Python对象

使用 json.loads()

json.loads() 函数用于将JSON格式的字符串转换为Python对象。

json_string = '{"name": "Bob", "age": 30, "is_student": true}'
parsed_data = json.loads(json_string)
print("解析后的数据:", parsed_data)
  • 1.
  • 2.
  • 3.

这个例子展示了如何将一个JSON字符串转换回Python对象(在这个案例中是一个字典)。

从文件读取

如果你想从文件中读取JSON数据并转换为Python对象,可以使用 json.load() 方法:

with open('data.json', 'r', encoding='utf-8') as f:
    loaded_data = json.load(f)
print("从文件加载的数据:", loaded_data)
  • 1.
  • 2.
  • 3.

其他常用选项

sort_keys:如果设置为 True,则输出的JSON对象中的键会按照字母顺序排序。

separators:允许你自定义分隔符,默认是 (', ', ': ')。例如,为了生成最紧凑的JSON表示形式,可以使用 (',', ':')。

compact_json = json.dumps(data, separators=(',', ':'))
print("紧凑的JSON:", compact_json)
  • 1.
  • 2.

注意事项

类型对应:需要注意的是,Python与JSON之间存在特定的数据类型映射规则。例如,Python中的 dict 对应于JSON中的对象,list 和 tuple 都映射为JSON数组等。

安全性:虽然 json 模块非常适合处理普通的JSON数据交换任务,但它并不适合处理不可信来源的数据。对于更复杂或潜在不安全的数据源,考虑使用其他方法如 pickle(尽管它也有自己的安全问题),或者使用专门的安全库。

责任编辑:华轩 来源: 测试开发学习交流
相关推荐

2010-08-05 13:07:11

FlexJson

2022-06-23 08:00:53

PythonDateTime模块

2010-03-10 14:03:41

python处理文本

2025-01-20 08:40:00

Python对象

2014-07-02 09:47:06

SwiftCocoaPods

2020-11-30 11:55:07

Docker命令Linux

2024-09-06 11:34:15

RustAI语言

2019-09-16 19:00:48

Linux变量

2020-04-09 10:18:51

Bash循环Linux

2024-01-18 08:37:33

socketasyncio线程

2015-08-27 09:46:09

swiftAFNetworkin

2021-06-09 09:36:18

DjangoElasticSearLinux

2021-03-09 07:27:40

Kafka开源分布式

2022-05-17 08:25:10

TypeScript接口前端

2011-08-10 09:31:41

Hibernateunion

2010-03-11 18:35:46

Python微线程

2018-06-26 09:15:24

Linux命令history

2018-05-16 10:32:06

Linux命令find

2022-11-18 10:16:26

Linuxwc 命令

2023-11-02 11:15:01

容器Kubernetes
点赞
收藏

51CTO技术栈公众号