JSON全称是JavaScript对象表示法,是通用的数据交换格式,许多软件的配置文件均使用JSON文件格式。
可以包括三种语法:
- 原始值
- 对象
- 数组
JSON无法包括如下的数据类型:
- 集合
- 映射
JSON语法
JSON存在四组标记符号:
- 中括号
[]
表示数组 - 花括号
{}
表示键值对 - 引号包裹住键的名称和字符串类型的键值,键值为数字是不加引号。
- 逗号区分数组的各个元素和各个键值对
JSON的格式与JavaScript对象(包括数组)的字面量格式非常类似,使用时容易搞混,要注意几个区别:
- JSON的键必须使用引号包裹,而JavaScript对象的键可以用也可以不用引号包裹。
- JavaScript对象允许用双斜杠添加注释,而JSON不能添加任何注释。
- JavaScript允许使用拖尾逗号,而JSON不能使用,逗号只能放在元素之间,不能用在末尾。
将JavaScript对象转换为JSON
要将对象转换为JSON字符串,使用JSON.stringify()方法,例如:
const obj = {a:1, b:2, c:3}
const json = JSON.stringify(obj)
console.log(json) // {"a":1,"b":2,"c":3}
可以在第二个参数中指定一个数组,表示筛选哪些属性进入JSON字符串:
const obj = {a:1, b:2, c:3}
const json = JSON.stringify(obj,['a','c'])
console.log(json) // {"a":1,"c":3}
将JSON序列化为JavaScript对象
可以将JSON序列化为对象,使用JSON.parse()方法。例如:
const json = '{"a":1,"b":2,"c":3}'
const obj = JSON.parse(json)
console.log(obj)
再来看一个例子,从本地的配置文件中读取JSON字符串转化为对象,修改后保存回配置文件。
如下是配置文件settings.json的内容:
{
"a":1,
"b":2,
"c":3
}
如下读取配置文件并解析为对象,然后写回配置文件中:
const fs = require('fs')
const json = fs.readFileSync('settings.json','utf8')
const obj = JSON.parse(json)
console.log(obj) // { a: 1, b: 2, c: 3 }
obj.a = 2
obj.c = 5
const json2 = JSON.stringify(obj)
fs.writeFileSync('settings.json',json2,'utf8')