JSON

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ì)象幾種思灌。

object軌道圖

上述涉及到一個(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ì)象幾種屿聋。


array軌道圖

上述軌道圖的表示的各種可能性:

    第一種:{}
    第二種:{"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)可以嵌套砌溺。


value
string(字符串)

字符串(string) 是由雙引號(hào)包圍的任意數(shù)量 Unicode 字符的集合,使用反斜線 轉(zhuǎn)義。一個(gè)字符(character)即一個(gè)單獨(dú)的字符串(character string)变隔。

string
number(數(shù)據(jù))

數(shù)值(number) 也與 C 或者 Java 的數(shù)值非常相似规伐。只是 JSON 的數(shù)值沒有使用 八進(jìn)制與十六進(jìn)制格式。

number

到此為止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ù)空郊,謝謝份招。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市狞甚,隨后出現(xiàn)的幾起案子锁摔,更是在濱河造成了極大的恐慌,老刑警劉巖入愧,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鄙漏,死亡現(xiàn)場離奇詭異,居然都是意外死亡棺蛛,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門巩步,熙熙樓的掌柜王于貴愁眉苦臉地迎上來旁赊,“玉大人,你說我怎么就攤上這事椅野≈粘” “怎么了?”我有些...
    開封第一講書人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵竟闪,是天一觀的道長离福。 經(jīng)常有香客問我,道長炼蛤,這世上最難降的妖魔是什么妖爷? 我笑而不...
    開封第一講書人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮理朋,結(jié)果婚禮上絮识,老公的妹妹穿的比我還像新娘绿聘。我一直安慰自己,他們只是感情好次舌,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開白布熄攘。 她就那樣靜靜地躺著,像睡著了一般彼念。 火紅的嫁衣襯著肌膚如雪挪圾。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,573評(píng)論 1 305
  • 那天逐沙,我揣著相機(jī)與錄音洛史,去河邊找鬼。 笑死酱吝,一個(gè)胖子當(dāng)著我的面吹牛也殖,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播务热,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼忆嗜,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了崎岂?” 一聲冷哼從身側(cè)響起捆毫,我...
    開封第一講書人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎冲甘,沒想到半個(gè)月后绩卤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡江醇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年濒憋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片陶夜。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡凛驮,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出条辟,到底是詐尸還是另有隱情黔夭,我是刑警寧澤,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布羽嫡,位于F島的核電站本姥,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏杭棵。R本人自食惡果不足惜婚惫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧辰妙,春花似錦鹰祸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至尔破,卻和暖如春街图,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背懒构。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來泰國打工餐济, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人胆剧。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓絮姆,卻偏偏與公主長得像,于是被迫代替她去往敵國和親秩霍。 傳聞我的和親對(duì)象是個(gè)殘疾皇子篙悯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容