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)
相关推荐
用户693717500138417 小时前
Google 正在“收紧侧加载”:陌生 APK 安装或需等待 24 小时
android·前端
蓝帆傲亦17 小时前
Web 前端搜索文字高亮实现方法汇总
前端
用户693717500138417 小时前
Room 3.0:这次不是升级,是重来
android·前端·google
qq_4176950519 小时前
机器学习与人工智能
jvm·数据库·python
漫随流水19 小时前
旅游推荐系统(view.py)
前端·数据库·python·旅游
yy我不解释19 小时前
关于comfyui的mmaudio音频生成插件时时间不一致问题(一)
python·ai作画·音视频·comfyui
踩着两条虫20 小时前
VTJ.PRO 核心架构全公开!从设计稿到代码,揭秘AI智能体如何“听懂人话”
前端·vue.js·ai编程
紫丁香21 小时前
AutoGen详解一
后端·python·flask
FreakStudio21 小时前
不用费劲编译ulab了!纯Mpy矩阵micronumpy库,单片机直接跑
python·嵌入式·边缘计算·电子diy
jzlhll12321 小时前
kotlin Flow first() last()总结
开发语言·前端·kotlin