JSON
JSON 可以表示以下三种类型的值。
- 简单值:使用与 JavaScript 相同的语法,可以在 JSON 中表示字符串、数值、布尔值和 null。
但 JSON 不支持 JavaScript 中的特殊值 undefined。 - 对象:对象作为一种复杂数据类型,表示的是一组无序的键值对。而每个键值对中的值可以是简单值,也可以是复杂数据类型的值。
- 数组:数组也是一种复杂数据类型,表示一组有序的值的列表,可以通过数值索引来访问其中的值。数组的值也可以是任意类型——简单值、对象或数组。
JSON 不支持变量、函数或对象实例,它就是一种表示结构化数据的格式,虽然与 JavaScript 中表示数据的某些语法相同,但它并不局限于 JavaScript 的范畴。
利用try catch + JSON.parse
判断字符串是否符合json格式
try {
JSON.parse(myString);
} catch (error) {
console.log(error)
}
JSON.parse(text[, reviver])
reviver为一个函数,将对象的每个成员调用此函数再输出结果
JSON.stringify(value[, replacer [, space]])
- value : undefined、任意的函数以及 symbol 值,在序列化过程中会被忽略(出现在非数组对象的属性值中时)或者被转换成 null(出现在数组中时)。
- replacer : 为一个函数或数组。为函数时,将对象的每个成员调用此函数再输出结果。为数组时,若value解析为对象,仅处理键值存在于该数组中的项;若value解析为数组,忽略replacer。
- space : 用于格式化输出结果,一般输入4。如不传则最后输出一个长行。
可格式化后输出在textarea中:
JSON.stringify(val, null, 4);
注意,对ES6中的class所生成的实例,若添加了不属于该class的属性,经过json.stringify
处理后会丢失
- 循环引用的对象不支持JSON.stringify
let a = {}, b = {child:a};
a.child = b;
console.log("a", JSON.stringify(a))//TypeError: Converting circular structure to JSON