苦于基础不牢固而对一个格式要求抓耳挠腮、进度频频被阻塞。
一、定义与特性
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,基于 JavaScript 对象语法,但独立于编程语言。
- 核心特征:
- 可读性强,结构清晰(键值对 + 层级嵌套);
- 体积小,传输效率高;
- 支持跨平台数据交换(Web/移动端/服务端通用)。
二、格式要求与语法规范
基础结构:
- 对象:
{ "key": value }
,键名必须用双引号包裹;- value基础类型:字符串(
"string"
)、数字(整数/浮点数)、布尔(true/false
)、null
;
- value基础类型:字符串(
- 数组:
[ value1, value2 ]
,元素间用逗号分隔。
格式规范:
- 禁止注释,键名必须为双引号字符串;
- 最后一个元素后不能有逗号;
- 严格区分大小写。
json文件内容示例:
[
{
"name": "Alice",
"age": 14,
"description": "哈喽,我是一条注释。虽然没有注释专用写法,但是添加一些不被获取处理的内容不就能当注释用了。看,下面的那个对象包含了一个数组,羡慕哦",
"hobbies": ["⭐","叁七"]
}
]
json文件为一个json数组,而内容是一条或多条json格式的对象
[
{
"name": "Alice",
"age": 14,
"hobbies": ["⭐"]
},
{
"name": "叁七",
"age": 20,
"hobbies": ["🎮"]
}
]
嵌套结构
[
{
"name": "Alice",
"age": 14,
"hobbies": ["⭐"],
"friends": [
{
"name": "叁七",
"age": 20,
"hobbies": ["🎮"]
},{
"name": "Alice还没有其他朋友",
"description":"并非json文件中所有并行对象格式都必须相同,但会在处理中报错,并且强迫症看到极其不舒服"
}
]
}
]
三、数据处理方法(JavaScript)
- JSON ↔ 字符串转换:
- 序列化:
JSON.stringify(obj)
,将对象转为 JSON 字符串; - 反序列化:
JSON.parse(str)
,将字符串转为 JS 对象。
- 序列化:
你可能见过
const obj = { name: "Alice", age: 14};
似乎很像json,然而事实是它只是一个JavaScript对象,再次强调json字符串是格式严格的,键值对必须用双引号包裹。
转换的方法是:
const jsonStr = JSON.stringify(obj);
const obj = JSON.parse(jsonStr);
序列化或反序列化之前不进行格式检查,有可能丢失原本的属性,你可能在报错中见过形如[Object Object]
的字符串,就是被玩坏的json格式
// 格式化
const jsonStr = JSON.stringify(obj, null, 2); // **缩进2空格美化**;
console.log(jsonStr);//打印出我们常见的格式
- 数据处理:
JavaScript 如何利用json数据?
假设一个json对象如下:const data = { users: [{ id: 1 }, { id: 2 }] };
那么data.users
就会得到一个数组,数组中包含两个对象,每个对象都有id
属性。
- 对象:用
for...in
循环或Object.keys()
遍历键值对; - 数组:用
forEach()
或for
循环处理。
// 示例:遍历 JSON 对象
const data = { users: [{ id: 1 }, { id: 2 }] };
for (let key in data) {
console.log(key, data[key]);
}
// 输出:users [ { id: 1 }, { id: 2 } ]
//注意,这里因为没有加引号,不是有效的json格式,json格式必须加引号
data.users.forEach(user => console.log(user.id)); // 输出 1, 2;
console.log(data.users.map(user => user.id)); // 输出 [1, 2]
console.log(data.users[1]);// 输出 { id: 2 }
复杂操作:
- 递归处理嵌套结构:用于深度修改或筛选数据;
- 字符串替换:正则表达式处理特殊字符(如
replace(/\\/g, '')
)。 - 流式接收处理fetch得来的数据体
JSON.parse()
异常处理:- 使用
try...catch
捕获无效 JSON 字符串。
try { const data = JSON.parse(jsonStr); } catch (e) { console.error(e);//一般输出invalide JSON string }
而
JSON.stringify()
不会检查原本是不是字符串格式- 使用
关于json的处理,可以在node环境打开命令行输入简单的语句进行测试
cmd
-> node
-> console.log(JSON.parse('{"name": "Alice", "age": 14}'));
相关
jsonl文件:json文件每行一条数据,适合于大数据量的处理,常用于大模型数据训练。
此方悬停