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)
相关推荐
kyriewen8 小时前
Anthropic 估值逼近万亿美元,Claude Sonnet 5 + Claude Science 一天两连发
前端·ai编程·claude
小徐_233310 小时前
Wot UI 2.2.0 发布:Button 新增 subtle,VideoPreview 预览体验继续增强
前端·微信小程序·uni-app
天蓝色的鱼鱼12 小时前
关于 CSS 你可能不知道的属性,但关键时刻很有用
前端·css
SelectDB12 小时前
Apache Doris Python UDF:让 SQL 直接调用 Python 生态,支撑 Agent 时代复杂业务逻辑
大数据·数据库·python
泯泷13 小时前
第 2 篇:设计第一套字节码:Opcode、Instruction 与 Constant Pool
前端·javascript·安全
妙码生花13 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(十五):优化细节、网络请求封装
前端·后端·ai编程
泯泷13 小时前
第 1 篇:从 1 + 2 开始:亲手写出第一台 JSVM
前端·javascript·安全
团团崽_七分甜13 小时前
Spring Boot 核心知识点总结
前端
lichenyang45313 小时前
从一个按钮开始,理解 ASCF 框架到底在做什么
前端