在JavaScript中,JSON是一种常见的数据交换格式,可以用来在客户端和服务器之间传递数据。而序列化JSON是将JavaScript中的对象转换为JSON格式的过程,反之则是将JSON字符串转换为JavaScript对象。
通过JSON.stringify()方法可以将JavaScript对象序列化为JSON字符串,如下所示:
var obj = {name: 'Tom', age: 18}; var jsonStr = JSON.stringify(obj); console.log(jsonStr); // 输出:{"name":"Tom","age":18}
而将JSON字符串转换为JavaScript对象,则可以使用JSON.parse()方法,如下所示:
var jsonStr = '{"name":"Tom","age":18}'; var obj = JSON.parse(jsonStr); console.log(obj); // 输出:{name: "Tom", age: 18}
需要注意的是,JSON字符串中的属性名必须使用双引号,否则将会报错。例如:
// 错误示例 var jsonStr = "{'name': 'Tom'}"; var obj = JSON.parse(jsonStr); // 报错 // 正确示例 var jsonStr = '{"name": "Tom"}'; var obj = JSON.parse(jsonStr); // 正常解析为对象
当JavaScript对象中包含日期对象时,序列化后的JSON字符串将无法直接被解析为JavaScript对象,需要进行特殊处理。可以通过在JavaScript对象中定义toJSON()方法来指定日期对象的序列化方式,例如:
var obj = { name: 'Tom', birth: new Date(), toJSON: function() { return { name: this.name, birth: this.birth.getTime() // 将日期对象转换为时间戳 } } }; var jsonStr = JSON.stringify(obj); console.log(jsonStr); // 输出:{"name":"Tom","birth":1623069857732}
除了日期对象外,JavaScript中还包含了Infinity、NaN和null等特殊类型。在序列化JSON时,Infinity和NaN将会被转换为null,而null将会被保留为null,如下所示:
var obj = { a: Infinity, b: NaN, c: null } var jsonStr = JSON.stringify(obj); console.log(jsonStr); // 输出:{"a":null,"b":null,"c":null}
总之,通过序列化JSON,我们可以将JavaScript对象转换为可供传输的字符串格式,方便与后端进行数据交互。