IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    json格式须知

    蔡晓建 (mc02cxj@gmail.com)发表于 2014-08-15 00:00:00
    love 0

    着重介绍与项目使用相关的json知识。如果没有特别说明,环境是指Javascript下的json。

    区分类型

    • 首先需要区分json字符串和json对象,不过通常根据上下文可以区分。
    • 协议关注的是json字符串,而代码中处理的是json对象,两者通过序列化(JSON.stringify)和反序列化相互转换(JSON.parse)。

    常见格式

    • 主要有数组和key/value形式的object
    • 数组是有顺序的,可以不同类型,常用于顺序遍历操作。
    • object是无顺序的,key只能是字符串,常用于快速随机查找。
    • null是可以被序列化的,而undefined不可以(会消失)。
    • 其他的一些特殊值,如Nan,Infinity,会被序列化为null。

    关于数组

    • 对于数组对象,虽然支持key/value的操作,但是序列化的时候设置的值会丢失。
    • 数组序列化的长度是根据length属性来的,没有赋值的位置是null。
    • 对数组遍历不应该采用for in语句,因为通过key/value设置的值也会被输出。

    关于Object

    • 规范上规定key是带双引号的字符串(),但实际上很多反序列化工具能够支持数值、单引号字符串、字符串字面量(没有引号的字符串)。
    • 如果是一普通浮点数值,可以通过相应的数值作为key获取,或者通过对应的字符串来获取。如用2.2的话,可以用2.2或”2.2”。
    • 如果是一整型数值,可以用数值,但用字符串只能用整型的,如用2.0的话,可以用2.0或2或”2”,但”2.0”就不可以。
    • 如果使用字符串字面量的话,需要避免一些关键字使用。如delete
    • key不应该重复,如果重复的话,通常结果是后面的会覆盖前面的。
    • 可以用.后面加key来取值,或者用[]这样的操作符来获取,第一种方式更推荐,但只能支持非数字开头的字符串,unicode也是可以。
    • 对object遍历可以采用for in语句。

    协议转换

    • 协议传输的是json字符串,但通常里边的类型都是字符串,不区分数值,因此做数值运算需要先转换。
    • 和xml一样,需要注意特殊字符如引号、回车、unicode等,尽量避免手动拼接,采用序列化工具。
    • object类型的json序列化/序列化的时候,都不应该预期他是有顺序的,虽然很多库都有带默认顺序,应该使用数组。


沪ICP备19023445号-2号
友情链接