怎么做成一个JSON:从零开始数据交换的核心格式
什么是JSON?为什么需要它?
在开始“做成一个JSON”之前,我们得先明白它是什么,JSON(全称JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式,以易于阅读和编写的文本形式存储和传输数据,它就像数据的“通用语言”,无论是前端网页、后端服务器,还是手机App,都能轻松“读懂”它。
你要保存一个用户的信息(姓名、年龄、爱好),或者让前端从后端获取商品列表,JSON都能把这些结构化数据 neatly 整理好,方便不同程序之间“对话”,它的核心特点包括:
- 结构简单:只有键值对、数组两种基本结构;
- 易读易写:纯文本格式,接近自然语言;
- 跨语言兼容:几乎所有编程语言都支持JSON的解析和生成。
JSON的基本语法规则:像搭积木一样组装数据
想“做成一个JSON”,得先它的“语法说明书”,JSON由两种基本结构组成:对象和数组,通过它们可以搭建复杂的数据“大厦”。
对象(Object):键值对的集合
对象是JSON中最核心的结构,用 包裹,内部由“键: 值”对组成,键和值之间用冒号 分隔,多个键值对之间用逗号 分隔(注意:最后一个键值对后面不能加逗号)。
- 键(Key):必须是字符串,可以用双引号 包裹(JSON标准要求必须用双引号,不能用单引号!)。
- 值(Value):可以是6种基本类型之一:
- 字符串(
"abc") - 数字(
123、14,不支持科学计数法如1e3) - 布尔值(
true/false,全小写,不能是True或TRUE) - null(表示空值,全小写,不能是
NULL或Null) - 对象(嵌套的)
- 数组(嵌套的
[])
- 字符串(
示例:一个简单的用户对象
{
"name": "张三",
"age": 25,
"isStudent": false,
"address": null
}
数组(Array):有序值的列表
数组用 [] 包裹,内部是值的有序集合,值之间用逗号 分隔(同样,最后一个值后面不加逗号),数组的值可以是上述6种基本类型,也可以是嵌套的对象或数组。
示例:一个包含多个爱好的数组
["篮球", "编程", "阅读"]
嵌套结构:对象套数组,数组套对象
实际数据往往更复杂,比如一个用户可能对应多个地址,一个订单可能包含多个商品——这时就需要用嵌套结构。
示例:嵌套的用户信息(对象中包含数组和嵌套对象)
{
"name": "李四",
"age": 30,
"hobbies": ["游泳", "旅行", "摄影"],
"contact": {
"email": "lisi@example.com",
"phone": "13812345678"
},
"orders": [
{
"orderId": "A001",
"product": "笔记本电脑",
"price": 5999
},
{
"orderId": "A002",
"product": "无线鼠标",
"price": 199
}
]
}
如何“做成一个JSON”:分步实践
了语法规则,接下来就是“动手做”,以下是生成JSON的两种常见场景:手动编写和代码生成。
场景1:手动编写JSON(适合简单数据或配置文件)
手动编写时,建议用文本编辑器(如VS Code、Sublime Text),并开启“语法高亮”功能(很多编辑器会自动识别.json文件并高亮显示)。
步骤:
- 确定数据结构:先理清楚要存储哪些数据,哪些是对象(键值对),哪些是数组(列表),比如要存一个“商品”信息,包含商品名、价格、库存、分类(分类可能有多个)。
- 搭建框架:先写最外层的 或
[],如果是单个商品,用 ;如果是商品列表,用[]。 - 填充键值对:按“键: 值”格式逐个添加,注意键用双引号,值根据类型填写(字符串加双引号,数字不加,布尔值用
true/false)。 - 处理嵌套:如果值是复杂类型(如分类是数组,商品详情是对象),继续按规则嵌套 或
[]。 - 检查语法:重点检查3个错误:
- 双引号是否成对(不能用单引号);
- 逗号是否多余(最后一个键值对/数组元素后不加逗号);
- 布尔值/null是否大小写写错(如
True、NULL是错误的)。
示例:手动编写一个商品JSON
{
"productId": "P1001",
"productName": "智能手表",
"price": 1299,
"stock": 50,
"categories": ["电子产品", "智能穿戴"],
"details": {
"screen": "1.4英寸AMOLED",
"battery": "7天续航"
},
"isAvailable": true
}
场景2:用代码生成JSON(适合动态数据或程序交互)
实际开发中,数据往往是动态的(如从数据库查询用户信息),这时需要用代码生成JSON,主流编程语言都提供了JSON操作库,核心步骤是:构建数据结构 → 转换为JSON字符串。
示例1:Python生成JSON
Python内置json模块,用json.dumps()(dumps=dump string,将Python对象转为JSON字符串)。
import json
# 1. 构建Python字典(对应JSON对象)
user_data = {
"name": "王五",
"age": 28,
"hobbies": ["画画", "音乐"],
"contact": {
"email": "wangwu@example.com"
},
"isActive": True
}
# 2. 转换为JSON字符串(ensure_ascii=False确保非英文字符正常显示,indent=4格式化缩进)
json_str = json.dumps(user_data, ensure_ascii=False, indent=4)
print(json_str)
输出结果(格式化后的JSON字符串):
{
"name": "王五",
"age": 28,
"hobbies": [
"画画",
"音乐"
],
"contact": {
"email": "wangwu@example.com"
},
"isActive": true
}
示例2:JavaScript生成JSON
JavaScript中,JSON是内置对象,直接用JSON.stringify()将对象转为JSON字符串。
// 1. 构建JavaScript对象(对应JSON对象)
const bookData = {
"isbn": "978-7-115-5XXXX-X",: "JavaScript高级程序设计",
"author": "Nicholas C. Zakas",
"price": 129,
"publishedDate": "2023-01-01",
"chapters": ["JavaScript简介", "在HTML中使用JavaScript", "基本概念"]
};
// 2. 转换为JSON字符串(JSON.stringify(对象, null, 缩进空格数))
const jsonStr = JSON.stringify(bookData, null, 2);
console.log(jsonStr);
输出结果:
{
"isbn": "978-7-115-5XXXX-X",: "JavaScript高级程序设计",
"author": "Nicholas C. Zakas",
"price": 129,
"publishedDate": "2023-01-01",
"chapters": [
"JavaScript简介",
"在HTML中使用JavaScript",
"基本概念"
]
}
常见错误与避坑指南
即使了语法,生成JSON时也容易踩坑,以下是高频错误及解决方法:
| 错误类型 | 错误示例 | 正确写法 | 原因 |
|---|---|---|---|
| 键用单引号 | { 'name': '张三' } |
{ "name": "张三" } |
JSON标准要求键必须用双引号 |
| 布尔值大小写错误 | `{ "isActive": True |



还没有评论,来说两句吧...