如何手动编写一个有效的JSON文件
JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,因结构简洁、易读易写,已成为前后端数据交互、配置文件存储等场景的常用选择,虽然许多工具能自动生成JSON,但手动编写是理解其底层逻辑的基础,也能应对简单场景的快速需求,本文将详细介绍手动编写JSON的核心规则、步骤及常见避坑指南,助你轻松JSON的“手写”技巧。
JSON是什么?为什么需要手动写它?
JSON本质上是一种文本格式,用于表示结构化数据,其语法基于JavaScript对象字面量,但独立于语言(几乎所有编程语言都支持JSON解析),它的核心优势是:
- 人类可读:格式清晰,类似字典/列表,便于直接查看和修改;
- 机器友好:解析简单,占用带宽小,适合网络传输;
- 结构化:支持嵌套,能表示复杂的数据关系(如用户信息、订单详情等)。
手动编写JSON的场景包括:简单配置文件(如config.json)、测试数据mock、小型数据存储等,无需依赖代码生成工具,快速直接。
手动编写JSON的5个核心规则
JSON的语法“严格到不近人情”,一个字符错误都可能导致解析失败,牢记以下5个核心规则,是写出有效JSON的前提:
规则1:数据类型只支持6种
JSON中所有值都必须是以下6种类型之一,不支持其他类型(如undefined、函数、日期等):
- 字符串(String):用双引号包裹,如
"name"、"北京"。
✅ 正确:"message"
❌ 错误:'message'(单引号)、message(无引号) - 数字(Number):整数或浮点数,无需引号,如
25、14。
✅ 正确:"age": 30
❌ 错误:"age": "30"(数字加引号变成字符串) - 布尔值(Boolean):
true或false(全小写,无需引号)。
✅ 正确:"isStudent": true
❌ 错误:"isStudent": "true" - null:表示空值,固定为
null(全小写,无需引号)。
✅ 正确:"extra": null
❌ 错误:"extra": "null"或"extra"`: NULL - 数组(Array):有序集合,用方括号
[]包裹,元素间用逗号分隔,元素可以是任意上述类型。
✅ 正确:"hobbies": ["reading", "swimming", 10]
❌ 错误:"hobbies": ["reading", "swimming"; 10](分号分隔) - 对象(Object):无序键值对集合,用花括号包裹,键值对用冒号分隔,多对键值对用逗号分隔,键必须是字符串(双引号包裹),值可以是任意上述类型。
✅ 正确:"user": {"name": "张三", "age": 25}
❌ 错误:"user": {name: "张三"}(键无引号)
规则2:引号、逗号、冒号的“排雷指南”
- 双引号是“标配”:JSON中所有字符串的键、值都必须用英文双引号(),不能用单引号()或中文引号(“”)。
✅ 正确:"city": "上海"
❌ 错误:'city': '上海'、“city”: “上海” - 逗号是“分隔符”,不是“句号”:数组或对象中的元素/键值对之间用逗号分隔,但最后一个元素/键值对后不能加逗号(否则会触发“ trailing comma”错误,部分解析器可能兼容,但严格JSON不允许)。
✅ 正确(对象):{"name": "李四", "age": 20}
✅ 正确(数组):["apple", "banana", "orange"]
❌ 错误(对象末尾逗号):{"name": "李四", "age": 20,}
❌ 错误(数组末尾逗号):["apple", "banana", "orange",] - 冒号是“键值粘合剂”:对象中键和值之间必须用冒号()分隔,冒号前后不能有空格(虽然多数解析器允许冒号前后有空格,但规范建议无空格以保证简洁)。
✅ 正确:"name":"王五"
✅ 可接受(规范建议避免):"name" : "王五"
规则3:嵌套结构:数组套对象,对象套数组
JSON支持嵌套,即数组中可以包含对象,对象中也可以包含数组(甚至多层嵌套),这是表示复杂数据的关键。
- 对象嵌套数组:表示一对多关系,如一个用户有多个爱好:
{ "user": { "name": "赵六", "hobbies": ["coding", "travel", "photography"] } } - 数组嵌套对象:表示多个同类型实体,如多个用户信息:
[ {"name": "张三", "age": 25}, {"name": "李四", "age": 30}, {"name": "王五", "age": 28} ] - 多层嵌套:复杂数据场景,如订单信息(订单包含多个商品,商品有详情):
{ "orderId": "ORD123456", "customer": {"name": "陈七", "phone": "13800138000"}, "items": [ { "productId": "P001", "productName": "笔记本电脑", "price": 4999, "quantity": 1 }, { "productId": "P002", "productName": "无线鼠标", "price": 99, "quantity": 2 } ], "totalAmount": 5197 }
规则4:转义字符:特殊字符的“逃生通道”
JSON字符串中包含特殊字符(如双引号、反斜杠\、换行符\n等)时,必须用反斜杠\进行转义,否则会破坏JSON结构,常见转义字符:
| 特殊字符 | 转义写法 | 说明 |
|----------|----------|------|
| 双引号 | \" | 字符串内包含双引号时必须转义 |
| 反斜杠\ | \\ | 字符串内包含反斜杠时必须转义 |
| 换行符 | \n | 表示换行 |
| 制表符 | \t | 表示缩进 |
| 回车符 | \r | 表示回车 |
| 反斜杠+其他字符 | 如\u4e2d | Unicode转义(如\u4e2d表示“中”) |
✅ 正确示例:"description": "这是一个\"测试\"字符串,包含换行符\n和反斜杠\\"
❌ 错误示例:"description": "这是一个"测试"字符串"(字符串内双引号未转义,会导致JSON提前终止)
规则5:顶层结构:要么是对象,要么是数组
一个完整的JSON文件,顶层(最外层)只能是一个对象或一个数组,不能是其他类型(如单独的字符串、数字)。
- ✅ 顶层是对象(最常见):
{"name": "测试", "value": 1} - ✅ 顶层是数组(如列表数据):
[{"id": 1}, {"id": 2}] - ❌ 顶层既不是对象也不是数组:
"hello"(单独字符串)、123(单独数字)、true(单独布尔值)
手动编写JSON的6个步骤(附实例)
以编写一个“用户信息配置文件”为例,以下是手动编写JSON的完整步骤:
步骤1:明确数据需求
假设我们需要存储一个用户的基本信息,包括:用户名(字符串)、年龄(数字)、是否激活(布尔值)、爱好(字符串数组)、地址(对象,包含



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