JSON 文件基础介绍

一、JSON 核心定义

  1. 全称:JavaScript Object Notation(JavaScript 对象表示法)
  2. 本质 :一种轻量级的文本数据交换格式 (整体是符合特定规则的字符串
  3. 作用:不同编程语言之间传递 / 存储数据(比如 Python 程序和前端、后端交互,或保存配置文件)
  4. 核心特点:语法简单、易读易写、跨语言兼容

二、JSON 与 Python 数据类型对应关系

JSON 类型 Python 类型 示例 关键注意点
对象(object) 字典(dict) {"name": "张三"} JSON 键必须用双引号,值如果是字符串类型的话也必须用双引号
数组(array) 列表(list) [1, 2, "篮球"] 元素可混合多种 JSON 类型
字符串(string) 字符串(str) "Python" 必须用双引号包裹
数字(number) 整数 / 浮点数 18 / 3.14 无引号,支持正负 / 小数
布尔值 True/False true / false JSON 是小写,Python 大写
空值 None null JSON 写 null,Python 写 None

三、JSON 核心语法规则

1. 整体规则

  • 一个合法的 JSON 文本 / 文件,只能有一个顶层数据 (要么是 {}、要么是 []、要么是单个基础值如 18/"张三"

2. 对象({})规则(对应 Python 字典)

  • {} 包裹,内部是键:值对的集合,键值对之间用英文逗号分隔
  • 键:必须用双引号 包裹(如 "name",不能写 name'name'
  • 值:可以是任意 JSON 类型(字符串、数字、布尔、null、数组、嵌套对象)
  • ✅ 正确示例:{"age": 18, "hobbies": ["篮球", "游戏"], "info": {"gender": "男"}}
  • ❌ 错误示例:{name: "张三", 'age': 18, 20}(键无引号 / 单引号、存在孤立值)

3. 数组(\[\])规则(对应 Python 列表)

  • [] 包裹,内部是任意 JSON 类型的元素,元素之间用英文逗号分隔
  • 无需键,直接放值即可,支持嵌套对象 / 数组
  • ✅ 正确示例:["张三", 18, true, null, {"age": 20}]
  • ❌ 错误示例:['张三', 18, True](单引号、布尔值大写)

4. 基础值规则

  • 字符串:必须用双引号("张三" ✅,'张三' ❌,张三 ❌)
  • 数字:无引号(18 ✅,"18" ❌)
  • 布尔:只能写 true/false(小写)
  • 空值:只能写 null

四、JSON 常用写法

模板 1:单对象(最常用,如存储单个用户信息)

javascript 复制代码
{
  "name": "张三",
  "age": 18,
  "is_student": true,
  "hobbies": ["篮球", "游戏"],
  "score": null,
  "address": {"city": "北京", "district": "朝阳"}
}

模板 2:数组(存储多个同类数据)

javascript 复制代码
[
  {"name": "张三", "age": 18},
  {"name": "李四", "age": 20},
  {"name": "王五", "age": 19}
]

数组里面混合不同数据类型也行

javascript 复制代码
{
  "user_id": 1001,
  "action_logs": [  // 数组里混合不同类型的行为记录
    "2026-03-18 登录系统",  // 字符串
    {"action": "下单", "amount": 99.9},  // 对象
    ["浏览商品", 1002, 1003],  // 数组
    null  // 空记录(比如未完成的操作)
  ]
}

模板 3:对象嵌套数组(实际开发最常用)

javascript 复制代码
{
  "class_name": "一年级一班",
  "total_students": 3,
  "students": [
    {"name": "张三", "age": 18},
    {"name": "李四", "age": 20},
    {"name": "王五", "age": 19}
  ],
  "update_time": "2026-03-18"
}

模板 4:单个基础值(极少单独用,了解即可)

javascript 复制代码
18          // 顶层是数字
"张三"      // 顶层是字符串
true        // 顶层是布尔值
null        // 顶层是空值

五、Python 操作 JSON 的核心函数

Python 内置 json 模块,无需安装,核心 4 个函数:

函数 作用 适用场景 关键参数
json.dumps() Python 对象 → JSON 字符串 内存中转换(如接口传参) ensure_ascii=False(保留中文)、indent=4(格式化)
json.loads() JSON 字符串 → Python 对象 解析接口返回的 JSON 字符串 -
json.dump() Python 对象 → 写入 JSON 文件 保存数据到文件 ensure_ascii=Falseencoding="utf-8"
json.load() 从 JSON 文件 → Python 对象 读取文件中的 JSON 数据 encoding="utf-8"
相关推荐
CedarQR18 小时前
万字长文:从零在 RK3588 上部署 PaddleSpeech 中文 TTS 全流程(FastSpeech2 + HiFiGAN)
开发语言·c++·嵌入式硬件·ubuntu·json
Geoking.2 天前
JSON vs JSONL:从数据格式到 AI Agent 的工程实践
人工智能·深度学习·json
ID_180079054732 天前
京东商品详情API能力解析与标准化应用方案(含JSON返回示例)
json
灯澜忆梦3 天前
Go 语言 _JSON---序列化与反序列化
开发语言·golang·json
梦幻通灵4 天前
Notepad++格式化Json两种方案【持续更新】
android·json·notepad++
解局易否结局4 天前
鸿蒙原生开发实战|Native JSON 编解码与高性能数据序列化
华为·json·harmonyos
代码的小搬运工4 天前
网络请求(NSURL、NSURLRequest、NSURLSessionDataTask、协议回调与 JSON 数据的基本流向)
网络·数据库·json
2601_960906725 天前
网络防御等最先进AI模型领域
人工智能·json·hbase·flume·storm
前网易架构师-高司机6 天前
带标注的山体滑坡塌方数据集数据集,识别率78.1%,974张图,支持yolo,coco json,voc xml,文末有模型训练代码
xml·yolo·json·数据集·自然灾害·山体滑坡
前网易架构师-高司机7 天前
带标注的SDD-SAR遥感船舶识别数据集,识别率92.9%,7000张图,支持yolo,coco json,voc xml,文末有模型训练代码
yolo·json·数据集·遥感·sar·船舶·sdd