JSON编写全指南:从基础到实用技巧
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,因其易读、易解析的特性,成为前后端数据交互、API接口配置、数据存储等场景的主流选择,本文将从JSON的基础概念出发,逐步讲解如何编写正确的JSON数据,并附常见避坑指南,助你快速JSON编写技巧。
JSON是什么?为什么需要它?
JSON是一种基于文本的数据格式,以“键值对”(Key-Value Pair)的形式组织数据,结构清晰,易于机器解析和人工阅读,它独立于语言(几乎所有编程语言都支持JSON解析),广泛用于:
- 前后端数据传输(如API接口返回的数据);
- 配置文件存储(如
package.json
、settings.json
); - 数据库导出/导入(如MongoDB的BSON格式就是JSON的二进制变体)。
JSON的基础语法规则
编写JSON前,需牢记以下核心语法规则,这是保证JSON“合法”的关键:
数据结构:键值对与数组
JSON支持两种核心数据结构:
-
对象(Object):用花括号 包裹,表示一组无序的键值对,键(Key)必须是字符串(需用双引号 包裹),值(Value)可以是多种数据类型(见下文)。
示例:{ "name": "张三", "age": 25, "isStudent": false }
-
数组(Array):用方括号
[]
包裹,表示一组有序的值,值可以是任意数据类型(包括对象或数组)。
示例:[1, "hello", true, {"key": "value"}]
支持的数据类型
JSON的值(Value)可以是以下5种基本类型:
- 字符串(String):必须用双引号 包裹(单引号非法),
"name"
、"北京"
。 - 数字(Number):整数或浮点数,无需引号,
18
、14
(注意:数字不支持八进制、十六进制,如012
或0xFF
非法)。 - 布尔值(Boolean):
true
或false
(全小写,首字母大写如True
非法)。 - 空值(Null):表示空值,固定为
null
(全小写,如NULL
非法)。 - 对象/数组:如上述基础结构,可嵌套使用。
语法细节:这些“标点”不能错!
- 键必须用双引号:
{name: "张三"}
错误(键name
缺双引号),正确应为{"name": "张三"}
。 - 值与键之间用冒号 分隔:
{"name" = "张三"}
错误(不能用),正确应为{"name": "张三"}
。 - 键值对之间用逗号 分隔:最后一个键值对后不能加逗号,
// 错误示例(末尾多逗号) { "name": "张三", "age": 25, } // 正确示例 { "name": "张三", "age": 25 }
- 数据层级用缩进提升可读性:JSON对缩进无强制要求(空格或Tab均可),但推荐用2或4空格缩进,层级更清晰。
如何编写JSON:从简单到复杂
场景1:表示单个用户信息
需求:存储用户姓名、年龄、是否为学生、邮箱。
{ "username": "lucy", "age": 20, "isStudent": true, "email": "lucy@example.com" }
场景2:表示嵌套数据(如用户地址)
需求:在用户信息中添加嵌套的地址信息(省、市、详细地址)。
{ "username": "lucy", "age": 20, "isStudent": true, "email": "lucy@example.com", "address": { "province": "北京市", "city": "海淀区", "detail": "中关村大街1号" } }
场景3:表示数组数据(如用户列表)
需求:存储多个用户的信息,用数组包裹每个用户对象。
[ { "username": "lucy", "age": 20, "isStudent": true, "email": "lucy@example.com" }, { "username": "tom", "age": 22, "isStudent": false, "email": "tom@example.com" } ]
场景4:复杂数据嵌套(数组+对象)
需求:存储用户及其多个爱好、多个订单信息。
{ "username": "lucy", "hobbies": ["reading", "swimming", "coding"], "orders": [ { "orderNo": "202310001", "date": "2023-10-01", "amount": 99.99 }, { "orderNo": "202310002", "date": "2023-10-05", "amount": 149.50 } ] }
JSON编写常见错误与避坑指南
初学者常因语法细节错误导致JSON不合法,以下是高频问题及解决方法:
错误1:键未用双引号
// 错误 {name: "张三", 'age': 25} // 正确 {"name": "张三", "age": 25}
错误2:字符串值用单引号
// 错误 {"name": '张三'} // 正确 {"name": "张三"}
错误3:末尾键值对多逗号
// 错误 {"name": "张三", "age": 25,} // 正确 {"name": "张三", "age": 25}
错误4:使用JavaScript特有语法
JSON不支持JavaScript的注释、函数、undefined
等语法,
// 错误(含注释和函数) { "name": "张三", // 这是注释 "sayHello": function() { return "hi"; }, // 函数非法 "data": undefined // undefined非法 } // 正确(仅保留基本数据类型) { "name": "张三", "data": null }
错误5:数字格式非法
// 错误(八进制、科学计数法不规范) {"num1": 012, "num2": 1e+3} // 正确(整数、浮点数、科学计数法需规范) {"num1": 10, "num2": 1000, "num3": 1e3}
如何验证JSON是否正确?
写完JSON后,建议通过工具验证合法性,避免因格式错误导致程序异常:
- 在线JSON验证工具:如 JSONLint,粘贴JSON代码即可检查语法错误。
- 代码编辑器插件:VS Code中安装“JSON”插件,保存时会自动提示语法错误。
- 编程语言内置方法:用Python的
json.loads()
、JavaScript的JSON.parse()
尝试解析,若报错则说明JSON不合法。
编写JSON的核心是“遵守语法规则”:键值对用包裹、键必双引号、值分类型、逗号不滥用,通过理解对象、数组的嵌套逻辑,结合实际场景(如用户信息、配置文件)多加练习,就能快速JSON编写,JSON是“数据交换的语言”,规范的JSON不仅能避免程序报错,还能让数据在不同系统间“无障碍流动”。
还没有评论,来说两句吧...