如何自己写JSON数据:从基础到实用技巧
什么是JSON?为什么需要自己写?
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,以“键值对”的方式组织数据,结构清晰、易于人阅读和机器解析,它常用于配置文件、数据接口交互、存储结构化数据等场景。
自己编写JSON数据是开发中的基础技能:无论是调试接口时构造请求数据,还是配置项目参数(如package.json、manifest.json),抑或存储用户信息、日志等结构化数据,都需要JSON的编写方法,本文将从基础语法到实用技巧,带你轻松学会自己写JSON数据。
JSON的基础语法规则
编写JSON前,需先其核心语法规则,避免因格式错误导致数据解析失败。
数据类型:JSON支持哪些值?
JSON中的值可以是以下几种类型:
- 字符串:用双引号包裹(单引号无效),如
"name"、"北京"。 - 数字:整数或小数,无需引号,如
25、14。 - 布尔值:
true或false(全小写,非True/False)。 - null:表示空值,固定为
null(非NULL或Null)。 - 数组:用方括号
[]包裹,元素间用逗号分隔,如["苹果", "香蕉"]。 - 对象:用花括号包裹,内部是“键值对”,键值间用冒号分隔,多个键值对用逗号分隔,如
{"name": "张三", "age": 20}。
语法细节:这些“坑”要避开!
- 键名必须用双引号:JSON规范要求对象的键名必须是字符串且用双引号包裹,单引号或无引号均会报错(如
{name: "张三"}是错误的)。 - 值后需加逗号,但最后一个元素不加:数组或对象中的多个元素/键值对需用逗号分隔,但最后一个元素后不能加逗号(如
["苹果", "香蕉", ]是错误的,应为["苹果", "香蕉"])。 - 不能使用注释:JSON标准不支持注释(如
// 这是注释或/* 注释 */),若需注释,可通过“键值对”单独存储(如{"_comment": "用户信息"})。 - 转义字符:字符串中的双引号需用反斜杠
\转义,如"他说:\"你好\""。
如何手动编写JSON数据?
结合基础语法,我们通过一个实例“用户信息”来拆解编写步骤。
示例目标:编写一个包含用户基本信息的JSON数据
需求:存储用户“李四”的信息,包括姓名(字符串)、年龄(数字)、是否激活(布尔值)、爱好(数组)、地址(对象)。
步骤1:确定数据结构(先画“骨架”)
根据需求,数据结构可设计为:
- 最外层是一个对象(用户信息整体)。
- 对象包含多个键值对:
name(姓名)、age(年龄)、isActive(是否激活)、hobbies(爱好)、address(地址)。 hobbies是数组,包含多个字符串;address是对象,包含city(城市)和street(街道)。
步骤2:逐层填充内容(填“血肉”)
-
外层对象:用包裹,键名用双引号,值暂留空:
{ "name": "", "age": , "isActive": , "hobbies": [], "address": {} } -
填充基本类型值:
name是字符串:"李四"age是数字:25isActive是布尔值:true
填充后:
{ "name": "李四", "age": 25, "isActive": true, "hobbies": [], "address": {} } -
填充数组(hobbies):爱好是多个字符串,用
[]包裹,逗号分隔:["阅读", "编程", "爬山"]更新后:
{ "name": "李四", "age": 25, "isActive": true, "hobbies": ["阅读", "编程", "爬山"], "address": {} } -
填充嵌套对象(address):地址包含城市和街道,用包裹:
{"city": "上海", "street": "南京东路123号"}最终完整JSON:
{ "name": "李四", "age": 25, "isActive": true, "hobbies": ["阅读", "编程", "爬山"], "address": { "city": "上海", "street": "南京东路123号" } }
步骤3:验证JSON格式是否正确
手动编写后,需检查语法是否符合规则,可通过以下方式快速验证:
- 在线工具:使用“JSON在线验证器”(如JSONLint),粘贴代码后会提示格式错误。
- 代码编辑器:VS Code等编辑器安装“JSON”插件,编写时会实时提示语法错误(如双引号缺失、逗号多余)。
进阶技巧:让JSON更实用
基础后,可通过以下技巧提升JSON的可用性。
处理复杂数据:嵌套与混合
JSON支持无限嵌套(对象套数组、数组套对象等),一个“商品列表”JSON可包含多个商品对象,每个商品对象又包含“规格”数组:
{
"products": [
{
"id": 1,
"name": "手机",
"specs": ["6.7英寸", "128GB", "黑色"],
"price": 3999
},
{
"id": 2,
"name": "笔记本",
"specs": ["16GB内存", "512GB SSD"],
"price": 5999
}
]
}
特殊字符转义:避免解析失败
字符串中包含双引号、换行符、制表符等特殊字符时,需用\转义:
{
"message": "他说:\"你好!\"\n这是第二行,\t制表符示例"
}
使用缩进和换行:提升可读性
JSON对缩进和换行无要求,但通过“2空格”或“4空格”缩进、合理换行,可让数据结构更清晰(如本文示例),注意:缩进不影响数据内容,仅为人阅读服务。
与编程语言交互:从JSON到对象/字典
编写JSON的最终目的是让程序解析,不同语言可将JSON转换为原生数据结构:
- JavaScript:用
JSON.parse()将JSON字符串转为对象,JSON.stringify()将对象转为JSON字符串。const jsonStr = '{"name": "李四", "age": 25}'; const obj = JSON.parse(jsonStr); // 转为对象:{name: "李四", age: 25} const newJson = JSON.stringify(obj); // 转为JSON字符串 - Python:用
json.loads()解析JSON字符串,json.dumps()生成JSON字符串(需ensure_ascii=False支持中文)。import json json_str = '{"name": "李四", "age": 25}' obj = json.loads(json_str) # 转为字典:{'name': '李四', 'age': 25} new_json = json.dumps(obj, ensure_ascii=False) # 转为JSON字符串(中文不转义)
常见错误与解决方案
| 错误类型 | 示例 | 解决方案 |
|---|---|---|
| 键名无双引号 | {name: "张三"} |
改为{"name": "张三"} |
| 值类型错误 | {"age": "20"}(年龄应为数字) |
根据需求调整为{"age": 20} |
| 末尾逗号 | ["苹果", "香蕉", ] |
删除最后一个逗号:["苹果", "香蕉"] |



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