Json数据结构认识
JSON是一种轻量级的,基于文本的数据交换格式,仅仅靠特定的字符格式就能很方便的传递字符信息,以下对JSON详细解读。
JSON:
全称:“JavaScript Object Notation”,(JavaScript 对象表示法),一种基于文本,独立于语言的轻量级数据交换格式,在我看来JSON的特性就是简洁,用处广泛,在我接触到的各个语言都有使用,可以跨平台使用,不存在通常意义上的字符格式问题。XML也是一种数据交换格式,不过XML标记比较多,往往使得标记比需要传递的数据都还多,这样会增加字符传输的负担。因此,若是能使用JSON的时候,我们更倾向于使用JSON。下面简单的说明下JSON
JSON规定的格式:
1)数据在键值对中
2) 数据由逗号分隔
3) 花括号保存对象
4) 方括号保存数组
JSON的两种结构:
JSON可以有两种表示结构:对象和数组
对象结构以"{"大括号开始,以"}"大括号结束。中间部分由以","来分割开键值对(key/value)代码表示如下:
- {
- key1:value1,
- key2:value2,
- ...
- }
其中:关键字需要是字符串,而值可以是其他任何数据,比如:字符串,数值,布尔值,对象或者是null。
数组结构以"["方括号开始,"]"方括号结束。中中间部分由以","来分割对象。代码表示如下:
- [
- {
- key1:value1,
- key2:value2
- },
- { key3:value3,
- key4:value4
- }
- ]
这样说比较空泛,用编程语言类比:两种结构的具体区别在于取值方式不同。对象是用{}包括起来的数据,比如{"key":"1024","key2":"2048"}.这样可以理解为string key="1024",string key2="2048"。需要取值的时候,就按照对应的键取对应的值。而对于数组结构,可以理解为["value","key","test"],这种结构,取值和数组一样,按索引
取值。总的来说,混合应用时,对象保存一个对象的信息,数组保存多个对象。
下面由简单到复杂的json举例:
对于最简单的JSON。可以使用下面的数据结构:
- {"firstKey":"Citron"}
- {
- "firstkey":"Citron",
- "address":"BeiJing",
- "phoneNum":"111"
- }
但是如果需要传递的一串数据是很多个人的信息呢?这就是数组和对象混合使用方式:
- {
- "people":[
- {"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"},
- {"firstName":"Jason","lastName":"Hunter","email":"bbbb"},
- {"firstName":"Elliotte","lastName":"Harold","email":"cccc"}
- ]
- }
问题又来了,people这个词太宽泛,如果我还想对它分类,按职业分类,再传递怎么办。
解决方法:传递一个对象,这个对象包含多个职业的数组,每个职业数组里面包含不同的人对象,每个人对象里面包含这个人的信息。
- {
- "programmers": [{
- "firstName": "Brett",
- "lastName": "McLaughlin",
- "email": "aaaa"
- }, {
- "firstName": "Jason",
- "lastName": "Hunter",
- "email": "bbbb"
- }, {
- "firstName": "Elliotte",
- "lastName": "Harold",
- "email": "cccc"
- }],
- "authors": [{
- "firstName": "Isaac",
- "lastName": "Asimov",
- "genre": "sciencefiction"
- }, {
- "firstName": "Tad",
- "lastName": "Williams",
- "genre": "fantasy"
- }, {
- "firstName": "Frank",
- "lastName": "Peretti",
- "genre": "christianfiction"
- }],
- "musicians": [{
- "firstName": "Eric",
- "lastName": "Clapton",
- "instrument": "guitar"
- }, {
- "firstName": "Sergei",
- "lastName": "Rachmaninoff",
- "instrument": "piano"
- }]
- }