Python常用系统自带库之json解析

摘要

本文介绍了Python系统类库json的几种用法,包含解析、转换、读取、写入、过滤,让我们看代码。

前提条件

  • 导入类库
javascript 复制代码
import json
from datetime import datetime
  • 设置文件编码utf-8

代码示例

1. 打开 JSON 文件

kotlin 复制代码
try:
    with open('data1.json', 'r', encoding='utf-8') as f:
        data = json.load(f)
    print(data) # 解析后的数据,输出: {'name': 'John', 'age': 30, 'city': 'New York', 'hobbies': ['reading', 'traveling', 'gaming']}
    print(type(data))  # 数据类型,输出: <class 'dict'>
except FileNotFoundError:
    print("错误:文件未找到,请检查路径是否正确。")
except json.JSONDecodeError as e:
    print(f"JSON 解析错误:{e}")
except Exception as e:
    print(f"未知错误:{e}")

2.将 Python 字典或列表转换回 JSON 字符串

sql 复制代码
dict_data = {'name': 'John', 'age': 30, 'city': 'New York', 'hobbies': ['reading', 'traveling', 'gaming']} #字典
list_data = ["reading", "cycling", "hiking"] #列表
#格式化打印
"""输出: 
{
    "age": 30,
    "city": "New York",
    "hobbies": [
        "reading",
        "traveling",
        "gaming"
    ],
    "name": "John"
}
[
    "reading",
    "cycling",
    "hiking"
]
"""
print(json.dumps(dict_data, ensure_ascii=False, sort_keys=True, indent=4))
print(json.dumps(list_data, ensure_ascii=False, sort_keys=True, indent=4))
#压缩打印
#输出: {"age": 30, "city": "New York", "hobbies": ["reading", "traveling", "gaming"], "name": "John"}
#输出: ["reading", "cycling", "hiking"]
print(json.dumps(dict_data, ensure_ascii=False, sort_keys=True))
print(json.dumps(list_data, ensure_ascii=False, sort_keys=True))

3.写入 JSON 数据到新文件

python 复制代码
with open('data2.json', 'w', encoding='utf-8') as f:
    json.dump(data, f, ensure_ascii=False, sort_keys=True, indent=4)

4.JSON逐行写入文件

python 复制代码
data_list = ['早上','中午','下午']
with open('data3.txt', 'w', encoding='utf-8') as f:
    for item in data_list:
        f.write(json.dumps(item, ensure_ascii=False) + '\n')
# 读取 JSON Lines 文件
with open('data3.txt', 'r', encoding='utf-8') as f:
    for line in f:
        item = json.loads(line)
        print(item)
"""输出: 
早上
中午
下午
"""

5.处理嵌套数据

python 复制代码
json_str = {
    "name": "Alice",
    "age": "30",
    "hobbies": ["reading", "null", "travel"],
    "address": {"city": "New York", "zip": "null"},
    "friends": [{"name": "Bob", "status": "active"}],
    "metadata": {"created_at": "2023-01-01T12:00:00", "tags": ["tech", "null", "life"]}
}

def process_nested(data):
    if isinstance(data, dict):
        for key, value in data.items():
            data[key] = process_nested(value)
    elif isinstance(data, list):
        for i, item in enumerate(data):
            data[i] = process_nested(item)
    elif isinstance(data, str):
        # 示例:将字符串 "null" 替换为 None
        if data.lower() == "null":
            return None
        # 将字符串形式的数字转换为整数或浮点数
        try:
            return int(data)
        except ValueError:
            try:
                return float(data)
            except ValueError:
                pass 
        try:
            dt = datetime.fromisoformat(data)
            return dt.date().isoformat()
        except ValueError:
            pass
    return data

#JSON中,空值必须用null表示(小写),而不是其他语言中的None、nil或undefined
#Python的json模块遵循这一规范,因此在序列化时会将Python的None转换为JSON的 null
cleaned_data = process_nested(json_str)
with open('data4.json', 'w', encoding='utf-8') as f:
    json.dump(cleaned_data, f, ensure_ascii=False, sort_keys=True, indent=4)

6.过滤 JSON 数据

css 复制代码
json_data = {
    "name": "Alice",
    "age": "30",
    "hobbies": ["reading", "null", "travel"],
    "address": {"city": "New York", "zip": "null"},
    "friends": [{"name": "Bob", "status": "active"}],
    "metadata": {"created_at": "2023-01-01T12:00:00", "tags": ["tech", "null", "life"]}
}
filtered_data = {key: value for key, value in json_data.items() if key in ['name', 'age']}
print(filtered_data)  # 输出: {'name': 'Alice', 'age': '30'}
  • 结果展示

总结

以上我们了解了Python系统类库json的几种用法,包含解析、转换、读取、写入、过滤,环绕dumps、dump、loads、load这几个方法展开。

关注公众号:咖啡Beans

在这里,我们专注于软件技术的交流与成长,分享开发心得与笔记,涵盖编程、AI、资讯、面试等多个领域。无论是前沿科技的探索,还是实用技巧的总结,我们都致力于为大家呈现有价值的内容。期待与你共同进步,开启技术之旅。

相关推荐
刀锋00011 小时前
从0到1手搓生产级 AI Agent:LangGraph 1.2 + LangChain 1.3 保姆级实战(全部代码已跑通)
人工智能·python·langchain·ai agent·langgraph
夜雪一千1 小时前
Python 如何实现 SHA 加密?SHA1 / SHA256 / SHA512 实战教程
开发语言·python
码云骑士1 小时前
106-模型量化技术-GGUF-GPTQ-AWQ-bitsandbytes对比
python
御风之翼_唤星者1 小时前
LoadFramePackModel模块报错bad escape
python·ai
民乐团扒谱机2 小时前
【微实验】谐波乘积谱(HPS)算法深度解析:原理、数学与代码实现
开发语言·人工智能·python·算法·语音识别·音乐
小白勇闯网安圈2 小时前
Django Ajax、批量操作与分页实践
python·django
Logintern092 小时前
Langgraph使用MemorySaver建立有记忆的图
开发语言·windows·python
Uncommon.3 小时前
使用pandas处理csv并转为张量
pytorch·python·深度学习·pandas
上玄code3 小时前
【Agent精讲】调一个LLMAPI背后的工程问题
java·开发语言·python·chatgpt
Uncommon.3 小时前
使用Pytorch操作张量(多维数组)
人工智能·pytorch·python