文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python处理Json数据格式的常见的20种小技巧

2024-11-28 14:56

关注

1. 导入 json 模块

首先,确保导入 json 模块。

import json

2. 将 Python 对象转换为 JSON 字符串

使用 json.dumps() 方法将 Python 对象转换为 JSON 字符串。

data = {
    "name": "Alice",
    "age": 30,
    "is_student": False
}
json_str = json.dumps(data)
print(json_str)  # 输出: {"name": "Alice", "age": 30, "is_student": false}

3. 将 JSON 字符串转换为 Python 对象

使用 json.loads() 方法将 JSON 字符串转换为 Python 对象。

json_str = '{"name": "Alice", "age": 30, "is_student": false}'
data = json.loads(json_str)
print(data)  # 输出: {'name': 'Alice', 'age': 30, 'is_student': False}

4. 读取 JSON 文件

使用 json.load() 方法从文件中读取 JSON 数据。

with open('data.json', 'r') as file:
    data = json.load(file)
print(data)

5. 写入 JSON 文件

使用 json.dump() 方法将 Python 对象写入 JSON 文件。

data = {
    "name": "Alice",
    "age": 30,
    "is_student": False
}
with open('data.json', 'w') as file:
    json.dump(data, file)

6. 格式化 JSON 输出

使用 indent 参数格式化 JSON 输出,使其更易读。

data = {
    "name": "Alice",
    "age": 30,
    "is_student": False
}
json_str = json.dumps(data, indent=4)
print(json_str)
# 输出:
# {
#     "name": "Alice",
#     "age": 30,
#     "is_student": false
# }

7. 处理日期和时间

使用 json 模块的 default 参数处理日期和时间对象。

from datetime import datetime
def json_default(value):
    if isinstance(value, datetime):
        return value.isoformat()
    raise TypeError(f"Type {type(value)} not serializable")
data = {
    "name": "Alice",
    "timestamp": datetime.now()
}
json_str = json.dumps(data, default=json_default)
print(json_str)

8. 自定义解码器

使用 object_hook 参数自定义解码器。

def custom_decoder(obj):
    if 'timestamp' in obj:
        obj['timestamp'] = datetime.fromisoformat(obj['timestamp'])
    return obj
json_str = '{"name": "Alice", "timestamp": "2023-10-01T12:00:00"}'
data = json.loads(json_str, object_hook=custom_decoder)
print(data)  # 输出: {'name': 'Alice', 'timestamp': datetime.datetime(2023, 10, 1, 12, 0)}

9. 处理 Unicode

使用 ensure_ascii 参数处理 Unicode 字符。

data = {
    "name": "Alice",
    "message": "你好,世界!"
}
json_str = json.dumps(data, ensure_ascii=False)
print(json_str)  # 输出: {"name": "Alice", "message": "你好,世界!"}

10. 处理特殊字符

使用 separators 参数处理特殊字符。

data = {
    "name": "Alice",
    "age": 30
}
json_str = json.dumps(data, separators=(',', ':'))
print(json_str)  # 输出: {"name":"Alice","age":30}

11. 处理嵌套数据

处理嵌套的 JSON 数据。

data = {
    "name": "Alice",
    "details": {
        "age": 30,
        "is_student": False
    }
}
json_str = json.dumps(data)
print(json_str)  # 输出: {"name": "Alice", "details": {"age": 30, "is_student": false}}

12. 处理列表

处理 JSON 列表。

data = [
    {"name": "Alice", "age": 30},
    {"name": "Bob", "age": 25}
]
json_str = json.dumps(data)
print(json_str)  # 输出: [{"name": "Alice", "age": 30}, {"name": "Bob", "age": 25}]

13. 处理空值

处理 JSON 中的 null 值。

data = {
    "name": "Alice",
    "age": None
}
json_str = json.dumps(data)
print(json_str)  # 输出: {"name": "Alice", "age": null}

14. 处理布尔值

处理 JSON 中的布尔值。

data = {
    "name": "Alice",
    "is_student": True
}
json_str = json.dumps(data)
print(json_str)  # 输出: {"name": "Alice", "is_student": true}

15. 处理数字

处理 JSON 中的数字。

data = {
    "name": "Alice",
    "age": 30,
    "height": 1.65
}
json_str = json.dumps(data)
print(json_str)  # 输出: {"name": "Alice", "age": 30, "height": 1.65}

16. 处理字符串

处理 JSON 中的字符串。

data = {
    "name": "Alice",
    "message": "Hello, World!"
}
json_str = json.dumps(data)
print(json_str)  # 输出: {"name": "Alice", "message": "Hello, World!"}

17. 处理特殊字符

处理 JSON 中的特殊字符。

data = {
    "name": "Alice",
    "message": "This is a \"quoted\" message."
}
json_str = json.dumps(data)
print(json_str)  # 输出: {"name": "Alice", "message": "This is a \"quoted\" message."}

18. 处理异常

处理 JSON 解析异常。

json_str = '{"name": "Alice", "age": 30, "is_student": false}'
try:
    data = json.loads(json_str)
    print(data)
except json.JSONDecodeError as e:
    print(f"JSON 解析错误: {e}")

19. 处理大文件

处理大文件时,使用流式处理。

import json
def read_large_json_file(file_path):
    with open(file_path, 'r') as file:
        for line in file:
            data = json.loads(line)
            yield data
for item in read_large_json_file('large_data.json'):
    print(item)

20. 处理 JSON 数组

处理 JSON 数组中的数据。

json_str = '[{"name": "Alice", "age": 30}, {"name": "Bob", "age": 25}]'
data = json.loads(json_str)
for item in data:
    print(item)
# 输出:
# {'name': 'Alice', 'age': 30}
# {'name': 'Bob', 'age': 25}

总结

以上是 20 种处理 JSON 数据的常见小技巧,涵盖了从基本的序列化和反序列化到高级的自定义编码和解码。通过这些技巧,你可以更高效、更灵活地处理 JSON 数据。

来源:测试开发学习交流内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯