JS笔记之JS数据类型(八)
JS笔记之JS数据类型(八)
1 JSON.stringify(obj)
JSON编码的对象与JS对象的字面量有一些区别:
- 字符串使用双引号,没有单引号或者反引号。
- 对象的属性名称也是双引号的,是强制性的。
JSON支持以下的数据类型:
- Objects {…}
- Arrays […]
- Strings ‘ ‘
- numbers 1
- boolean true false
- null
JSON是语言无关的数据规范,所以一些属于JS的对象属性将会被忽略掉,例如:
- 函数
- Symbol
- undefined
1 | let user = { |
Tips:在使用JSON.stringify(obj) 时(仅包含单个参数),对象中不能有循环引用。
2 排除和转换 replacer
JSON.stringify 的完整语法是:
1 | let json = JSON.stringify(value[, replacer, space]) |
如果要过滤掉循环引用, 可以使用JSON.stringify的第二个参数:replacer,如果我们传递一个属性数组给他,name只有这些属性会被编码。
1 | let room = { |
在上文的例字中,因为只设置了 participants和title, 所以输出内容中的 participants的下一级为空。
可以使用一个函数来保证转换的数据不包括循环引用的所有属性:
1 | let room = { |
3 格式化 space
JSON.stringif 的第三个参数是优化格式的空格数量。也可以是字符串,字符串用于缩进而不是空格的数量。spaces 参数仅用于日志记录和美化输出。
1 | let room = { |
4 自定义 toJson
toString 可以进行字符串转化, 对象也可以自定义toJson来进行JSON转换,如果可用,JSON.stringify 则会自动调用它。 在Python 输出类的字符串形式, 使用魔术方法__str__
和__repr__
。
1 | let room = { |
toJson 既可以用于直接调用JSON.stringify, 也可以在嵌套在另一个对象时,被调用。
5 JSON.parse
将JSON字符串要解码JS对象
1 | let value = JSON.parse(str, [reviver]); |
1 | let userData = '{ "name": "John", "age": 35, "isAdmin": false, "friends": [0,1,2,3] }'; |
当要解析的字符串包括日期字符串时,JSON.parse 就无法解析,这是我们可以通过第二个参数,定义一个函数来判断key。
1 | let schedule = `{ |
函数在嵌套中同样适用。
6 总结
- JSON 支持 object,array,string,number,boolean 和 null。
- 如果独享具有toJson方法,那么会被 JSON.stringify 调用。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 编程纪元!
评论
ValineGitalk