某天聊天时听到有人说,json必须以 {
开头,以 }
结尾,顿时很无语。
Json到底该是什么样子,官方网站上说的很明白.
另外附上一个很不错的在线验证及格式化Json的网站:Json.cn
本文对Json的格式简单说下
JSON是 JavaScript Object Notation
的缩写,它是一种数据交换格式,2002年由道格拉斯·克罗克福特(Douglas Crockford)发明的。
在它之前,大家都用XML
来交换数据,XML是纯文本格式,本身不难,但是加上 DTD、XSD、XSLT
等一堆规范后就相当复杂了。
既然JSON是JavaScript Object Notation
,我们就看看JavaScript中都有什么对象。
JavaScript的对象是一种无序的集合数据类型,它由若干键值对组成,
一个普通的js对象用一个{...}
表示,键值对以key : value
形式声明。
除此之外还有 number、string、boolean
等对象,可以通过 typeof obj
来获取对象的类型,如下:
// 普通对象
var obj = {
name : "小明",
gender : "男",
age : 28
};
// 空对象
var o = null;
// 数组对象
var arr = [1, 2, 3];
// 数字对象
var num1 = 1;
var num2 = 123.456;
// 字符串
var str = "abcde";
// 布尔
var bool = true;
typeof obj; // object
typeof o; // object
typeof arr; // object
typeof num1; // number
typeof num2; // number
typeof str; // string
typeof bool; // boolean
上面例子中,虽然{}, null, []
都是object
,但是他们的形式不太一样。
JSON中的对象来自于JavaScript中,总共以下这几种数据类型:
number | js中的number |
boolean | js中的boolean, 即true或false |
string | js中的string |
null | js中的null |
array | js中的的Array, 即[]形式的对象 |
object | js中的普通对象, 即{ … }形式的对象. |
另外JSON还规定了字符集必须用UTF-8, 字符串必须用双引号""
, 对象中的key也必须用双引号""
所以,以下的json都是正确的:
null
"一个字符串"
3.14
[1, 2, 3, "asdf"]
{"name" : "Rose", "age": 18}
注意:
{"name" : "Rose", "age": 18}
是普通对象, 3.14
也是一个对象,两者都是合法的json串null, 3.14
这样不是合法的json串,要表示多个对象,必须放到普通对象中以键值对的形式出现像上面的说的,Json的值有一定的格式,应该是下面图中的样子:
其中的string
就是正常的字符串, number
就是数字,如整数、小数、负数等;
其中的object
应是下图描述的样子:
其中的array
应是下图描述的样子: