JSON
什么是JSON?
JSON
(JavaScript Object Notation),是一種輕量級(jí)的數(shù)據(jù)交換格式
。非常容易進(jìn)行閱讀和編寫闯参。同時(shí)也方便了機(jī)器進(jìn)行解析和生成
。
JSON采用完全獨(dú)立于程序語言的文本格式悲立,但是也使用了類C語言的習(xí)慣(包括C, C++, C#, Java, JavaScript, Perl, Python, and many others)鹿寨。這些特性使JSON成為理想的數(shù)據(jù)交換語言。
JSON官網(wǎng)
JSON是建立在兩個(gè)結(jié)構(gòu)之上 :
- 一個(gè)
鍵/值對(duì)
的集合薪夕。在不同的編程語言中脚草,這是作為 對(duì)象,記錄原献、結(jié)構(gòu)馏慨、字典埂淮、哈希表、列表写隶、或關(guān)聯(lián)數(shù)組來實(shí)現(xiàn)的倔撞。 - 一個(gè)有序的
values
列表。在大多數(shù)語言中慕趴,這是作為一個(gè)數(shù)組痪蝇、向量、列表或序列來實(shí)現(xiàn)的冕房。
(下面這句話可以不必理解:)
這些都是通用的數(shù)據(jù)結(jié)構(gòu)躏啰。幾乎所有的現(xiàn)代編程語言都以一種或另一種形式支持它們。它是有意義的一種數(shù)據(jù)格式耙册,是與編程語言可以互換的基礎(chǔ)给僵。
talk is cheap,show me the code
//成功返回
{
"statuses": [
{
"created_at": "Tue May 31 17:46:55 +0800 2011",
"id": 11488058246,
"text": "求關(guān)注。"觅玻,
"source": "<a rel="nofollow">新浪微博</a>",
"favorited": false,
"truncated": false,
"in_reply_to_status_id": "",
"in_reply_to_user_id": "",
"in_reply_to_screen_name": "",
"geo": null,
"mid": "5612814510546515491",
"reposts_count": 8,
"comments_count": 9,
"annotations": [],
"user": {
"id": 1404376560,
"screen_name": "zaku",
"name": "zaku",
"province": "11",
"city": "5",
"location": "北京 朝陽區(qū)",
"description": "人生五十年想际,乃如夢(mèng)如幻培漏;有生斯有死溪厘,壯士復(fù)何憾。",
"url": "http://blog.sina.com.cn/zaku",
"profile_image_url": "http://tp1.sinaimg.cn/1404376560/50/0/1",
"domain": "zaku",
"gender": "m",
"followers_count": 1204,
"friends_count": 447,
"statuses_count": 2908,
"favourites_count": 0,
"created_at": "Fri Aug 28 00:00:00 +0800 2009",
"following": false,
"allow_all_act_msg": false,
"remark": "",
"geo_enabled": true,
"verified": false,
"allow_all_comment": true,
"avatar_large": "http://tp1.sinaimg.cn/1404376560/180/0/1",
"verified_reason": "",
"follow_me": false,
"online_status": 0,
"bi_followers_count": 215
}
},
..
],
"previous_cursor": 0,
"next_cursor": 11488013766,
"total_number": 50
}
//失敗返回
{
"request": "/statuses/public_timeline/biz.json",
"error_code": XXXXX,
"error": "error message."
}
上述是微博開放平臺(tái)中牌柄,找到了其中一個(gè)接口返回的數(shù)據(jù) (數(shù)據(jù)格式j(luò)son) 獲取最新的公共微博畸悬。
開放平臺(tái)很多,列舉簡單的幾個(gè)珊佣,如下列表:
言歸正傳蹋宦,讓我們仔細(xì)觀察上面復(fù)雜的json串,我們可以看到許許多多 { }咒锻,"aaa":"bbb", [ ], 等等冷冗,這些又是什么呢? 其實(shí)這都是我們上述介紹過的兩種結(jié)構(gòu)
這兩種結(jié)構(gòu)就是對(duì)象和數(shù)組兩種 結(jié)構(gòu),通過這兩種結(jié)構(gòu)可以表示各種復(fù)雜的結(jié)構(gòu)惑艇。
1.對(duì)象(Object)(第一種結(jié)構(gòu))
對(duì)象在 js 中表示為“{}”括起來的內(nèi)容,數(shù)據(jù)結(jié)構(gòu)為 {key:value,key:value,...}的鍵 值對(duì)的結(jié)構(gòu),在面向?qū)ο蟮恼Z言中,key 為對(duì)象的屬性,value 為對(duì)應(yīng)的屬性值,所以 很容易理解,取值方法為 對(duì)象.key 獲取屬性值,這個(gè)屬性值的類型可以是 數(shù)字蒿辙、 字符串、數(shù)組滨巴、對(duì)象幾種思灌。
上述涉及到一個(gè)關(guān)鍵概念我們暫且叫做: 軌道圖
軌道圖其實(shí)就像我們的交通圖:
我們想象,開著車去一個(gè)地方恭取,我們有多少線路就有多少走法泰偿,我們可以在合適的路口,選擇去不同的方向蜈垮,我只需要轉(zhuǎn)彎處遵守相應(yīng)的規(guī)則耗跛,除此之外裕照,我們就不用忌憚什么了,如果你比較閑调塌,甚至可以在某個(gè)環(huán)路上牍氛,轉(zhuǎn)圈圈,只需要將我們所說的軌道圖烟阐,想象成開車就可以搬俊。
下面我們看看上述軌道圖的表示的各種可能性。
第一種:{}
第二種:{"ballplayer": "麥迪"}
當(dāng)然你可以說有很多種蜒茄,確實(shí)(根據(jù)你自己的喜好唉擂,和需求,可以在上述圖的環(huán)形路中隨便轉(zhuǎn)圈)
第三種:
{
"ballplayer": "麥迪",
"ballplayer2": "科比",
"ballplayer3": "鄧肯"
"ballplayer4": "庫里"
...........
}
2.數(shù)組(Array)(第二種結(jié)構(gòu))
數(shù)組在js中是中括號(hào)“[]”括起來的內(nèi)容,數(shù)據(jù)結(jié)構(gòu)為 ["java","javascript","vb",...], 取值方式和所有語言中一樣,使用索引獲取,字段值的類型可以是 數(shù)字檀葛、字符串玩祟、 數(shù)組、對(duì)象幾種屿聋。
上述軌道圖的表示的各種可能性:
第一種:{}
第二種:{"Monday"}
當(dāng)然你可以說有很多種空扎,確實(shí)(根據(jù)你自己的喜好,和需求润讥,可以在上述圖的環(huán)形路中隨便轉(zhuǎn)圈)
第三種:
{
"Tuesday",
"Wednesday",
"Thursday"
..........
}
數(shù)據(jù)類型
value(值)
值(value) 可以是雙引號(hào)括起來的字符串(string)转锈、數(shù)值(number)、true楚殿、false撮慨、 null、對(duì)象(object)或者數(shù)組(array)脆粥。這些結(jié)構(gòu)可以嵌套砌溺。
string(字符串)
字符串(string) 是由雙引號(hào)包圍的任意數(shù)量 Unicode 字符的集合,使用反斜線 轉(zhuǎn)義。一個(gè)字符(character)即一個(gè)單獨(dú)的字符串(character string)变隔。
number(數(shù)據(jù))
數(shù)值(number) 也與 C 或者 Java 的數(shù)值非常相似规伐。只是 JSON 的數(shù)值沒有使用 八進(jìn)制與十六進(jìn)制格式。
到此為止Json基本語法規(guī)則就這些了匣缘,我們通過這兩種結(jié)構(gòu)進(jìn)行各種嵌套猖闪,表示各種復(fù)雜的結(jié)構(gòu)。以滿足我們的需求孵户,對(duì)于初學(xué)者來說萧朝,嵌套層次越深,越容易迷惑夏哭,下面準(zhǔn)備了一些練習(xí)检柬,你可以做一做。想一想。
練習(xí):
1.請(qǐng)分析何址,并練習(xí)
{
"animals": {
"dog": [
{
"name": "wangcai",
"age": 15
},
{
"name": "Marty",
"age": null
}
]
}
}
2.有這樣一個(gè)需求里逆,客戶端需要一個(gè)馬刺隊(duì)的現(xiàn)役球員名單,每個(gè)球員需要寫出年齡和姓名用爪,
及身高信息原押,數(shù)據(jù)傳輸格式選擇 Json。 請(qǐng)手寫偎血,Json串诸衔,并通過在線解析器檢驗(yàn)合法性。
3. 分析上述例子中的json串信息颇玷,或者瀏覽新浪微博開放平臺(tái)笨农,找到開放接口,并選擇
一個(gè)接口帖渠,進(jìn)行接口分析谒亦。
最后附上一張截圖,待續(xù)空郊,謝謝份招。
![](https://penglimin.github.io/assets/LeonpengPicture/json.png)