What is JSON?

Published on:

初学 JSON 的时候,我知道 JSON 的格式要求很严格

{
  "name": "john",
  "age": 18
}
  • 左右最外侧有大括号
  • 由一对对键值 key/value组成,key必须用英文,value可以使用任意字符,但不论如何,键值都必须用英文字符双引号括起来,不能使用单引号代替
  • 键值之间,用引文字符冒号隔开
  • 一对键值之间与另一对键值之间必须用英文字符都好隔开
  • 除了 value 值之外,所有字符必须使用英文字符

想知道一个 JSON 文件格式是否正确,可以使用这个网站来检测 :
JSON Formatter & Validator

其中,尤其要注意键值必须使用双引号,否则会出错,invalid

另外,字符串中间不能直接回车,如果要换行,可以使用转义符号\n

但有时候,我发现在 node.js的运行环境,JSON居然不是 JSON,而是 js obj,不仅仅如此,在浏览器的运行环境也是一样的情况。

为什么会这样?不是说好了,不要互相伤害吗?

实际上,这是因为我没有完全理解 JSON 的原因,mozilla 给出的定义是这样的:

JavaScript Object Notation (JSON) is a standard text-based format for representing structured data based on JavaScript object syntax, which is commonly used for representing and transmitting data on web sites.

根据上面的定义,JSON 是一个基于文本的数据格式,一般用于与服务器交换数据,当服务端需要交换数据的时候,倾向于使用字符串格式,因为字符串可以在所有语言中以相同的方式进行解释,为此,已经创建了将复杂数据结构描述为字符串的标准规则或语法。 JSON可以在字符串中描述obj,array,string,number,boolean和null,可以在 app 之间有效的传递数据,并根据需要进行解码。(JSON的语法跟 obj 的语法类似,事实上,前者是后者的一个子集。)

因此,只有在 string 格式的时候,JSON 才是 JSON,否则就会自动变成 obj,在 ruby 环境会变成 hash。

// This is a JSON String.
var foo = '{ "name": "john" }';
 
// This is an Object literal.
var bar = { "name": "john" };

JSON除了 类似obj的语法格式以外,还可以用任何包含 json 格式的数据类型,比如可以使用 array的格式,即多个 json 集合,例如:

[
  {
    "name": "Molecule Man",
    "age": 29,
    "secretIdentity": "Dan Jukes",
    "powers": [
      "Radiation resistance",
      "Turning tiny",
      "Radiation blast"
    ]
  },
  {
    "name": "Madame Uppercut",
    "age": 39,
    "secretIdentity": "Jane Wilson",
    "powers": [
      "Million tonne punch",
      "Damage resistance",
      "Superhuman reflexes"
    ]
  }
]

For more info, please refer to links below:

  1. there is no such thing as a “JSON” object
  2. JSON from mozilla
  3. JSON Quick Guide

Comments

comments powered by Disqus