python:输出JSON

复制代码
import json

data = [{
    'name': 'Bob',
    'gender': 'male',
    'birthday': '1992-10-18'
}]
with open('data.json', 'w', encoding='utf-8') as file:
    file.write(json.dumps(data))

运行效果如下:

关键知识点:

json.dumps用法

json.dumps() 是 Python 标准库 json 模块中的一个函数,用于将 Python 对象 (如字典、列表等)序列化为 JSON 格式的字符串。这个过程也叫"编码"(encoding)。


🔧 基本语法:

复制代码
json.dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True,
           allow_nan=True, cls=None, indent=None, separators=None,
           default=None, sort_keys=False, **kw)

最常用的是前几个参数,我们重点看:

参数 说明
obj 要转换的 Python 对象(如 dict、list、str、int 等)
indent 格式化输出时的缩进空格数(例如 indent=2),便于阅读
ensure_ascii 默认为 True,非 ASCII 字符(如中文)会被转义;设为 False 可保留原字符
sort_keys 是否对字典的键进行排序(默认 False
separators 控制分隔符,如 (',', ':') 可减少输出体积

✅ 示例 1:基本用法

复制代码
import json

data = {'name': '张三', 'age': 25}
json_str = json.dumps(data)
print(json_str)
# 输出: {"name": "\u5f20\u4e09", "age": 25}  (中文被转义)

✅ 示例 2:保留中文(不转义)

复制代码
json_str = json.dumps(data, ensure_ascii=False)
print(json_str)
# 输出: {"name": "张三", "age": 25}

✅ 示例 3:格式化输出(带缩进)

复制代码
json_str = json.dumps(data, ensure_ascii=False, indent=2)
print(json_str)

输出:

复制代码
{
  "name": "张三",
  "age": 25
}

✅ 示例 4:写入文件(配合 open

虽然你可以用 file.write(json.dumps(data)),但更推荐使用 json.dump() 直接写入:

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

注意区别:

  • json.dumps() → 返回 字符串
  • json.dump() → 直接将对象 写入文件

⚠️ 支持的数据类型

json.dumps() 只能处理以下 Python 类型:

  • dict → JSON object
  • list, tuple → JSON array
  • str → JSON string
  • int, float → JSON number
  • True / Falsetrue / false
  • Nonenull

如果包含 datetime、自定义类等,会报错,需通过 default 参数处理。


✅ 处理不支持的类型(如 datetime)

复制代码
from datetime import datetime
import json

def serialize(obj):
    if isinstance(obj, datetime):
        return obj.isoformat()
    raise TypeError("Type not serializable")

data = {'time': datetime.now()}
json_str = json.dumps(data, default=serialize, ensure_ascii=False)
print(json_str)
相关推荐
涵涵(互关)3 分钟前
Naive-ui树型选择器只显示根节点
前端·ui·vue
BY组态12 分钟前
Ricon组态系统最佳实践:从零开始构建物联网监控平台
前端·物联网·iot·web组态·组态
BY组态17 分钟前
Ricon组态系统vs传统组态软件:为什么选择新一代Web组态平台
前端·物联网·iot·web组态·组态
SoaringHeart19 分钟前
Flutter进阶:OverlayEntry 插入图层管理器 NOverlayZIndexManager
前端·flutter
放下华子我只抽RuiKe528 分钟前
React 从入门到生产(四):自定义 Hook
前端·javascript·人工智能·深度学习·react.js·自然语言处理·前端框架
涛声依旧-底层原理研究所31 分钟前
残差连接与层归一化通俗易懂的详解
人工智能·python·神经网络·transformer
csdn_aspnet37 分钟前
Python 算法快闪 LeetCode 编号 70 - 爬楼梯
python·算法·leetcode·职场和发展
fantasy_arch1 小时前
pytorch人脸匹配模型
人工智能·pytorch·python
熊猫_豆豆1 小时前
广义相对论水星近日点进动完整详细数学推导
python·天体·广义相对论
web3.08889991 小时前
1688 图搜接口(item_search_img / 拍立淘) 接入方法
开发语言·python