关于json的知识点总结

305 阅读2分钟

今日朋友跟我说起她去面试要手写一个json.stringify的实现过程的惨痛经历。吓得我赶紧拿出我的红宝书恶补了一下json。以下是我的学习笔记,仅供参考。

  • json没有变量, 函数或对象实例的概念。
  • json 的所有记号都只为表示结构化数据, 虽然借用的js的语法, 但不是js语言
  • js 字符串与json字符串的区别是:json字符串必须使用双引号(单引号会导致语法错误)
  • 与js对象字面量相比, json 主要的不同: 没有变量声明(json中没有变量)
  • stringify 将js序列化为json字符串
  • parse 将json解析为原生js值
  • 在序列化为js对象时,所有函数和原型成员都会有意地在结果中省略,值为undefined的任何属性也会被跳过。最终得到的就是所有实例属性均为有效json数据类型的表示

序列化选项

  • json.stringify()除了要序列化对象外,还可以接收两个参数, 这两个参数可以用于指定其他序列化js对象的方式。第一个参数是过滤器, 可以是数组或函数;第二个参数是用于缩进结果的json字符串选项
  • 如果第二个参数是一个数组, 那么json.stringify()返回的结果只会包含数组中列出的对象属性
  • 若第二个参数是函数, 提供的函数接收两个参数: 属性名(key)和属性值(value)。 可以根据这个key决定要对相应属性执行操作。该key始终是字符串,只是在值不属于某个键/值对时会是空字符串。
  • json.stringify的第三个参数控制缩进和空格。在这个参数是数值时,表示每一级缩进的空格数
  • 如果缩进参数是一个字符串而非数值, 那么json字符串中就会使用这个字符串,而不是空格来缩进。使用字符串,也可以将缩进字符设置为tab或任意字符
let jsonText = Json.stringgify(book, null, "--")
  • json.parse()还可以接收一个额外的参数, 该函数会针对每个键值/对都调用一次。为区别于传给json.stringify()的起过滤作用的替代函数,这个函数被称为还原函数,实际上他们的格式完全一样。

  • [ 高程中还讲了一个toJSON方法,感觉实际工作中没用过,不是很理解他的用途]