因有朋友想了解一下JSON是什麼,又覺得json.org太難理解,因此寫了這篇淺顯的白話說JSON。
JSON首先拿一個物件(object)來當資料的容器,也就是拿來裝東西就是了。
這個物件/容器就是一對大括號{},然後括號裡面的東西,都是用key:value這樣的成對結構來組成的。key可以想成是標籤,value就是要加上標籤的東西。
如果容器裡面放的東西不只一樣,那就用逗號分開。綜合以上概念,舉個實例:
{"burger":"cheseburger","drink":"coffee"}
就是一個JSON的資料結構。然後這種結構是可以層層嵌套的,假設剛剛那個配餐是一號餐(combo1)套餐的value,我們就可以用:
{"combo1":{"burger":"cheseburger","drink":"coffee"}}
JSON的key一定要是字串(string), 用雙引號把文字包裝來,原則上unicode的文字都可以使用,所以用中文也行,不過實務上比較少這樣用。
而value比起key就多彩多姿了,它除了可以放上面使用的字串之外,也可以放陣列(array)、數字(number)、true、false(邏輯上的真、假值,不需要雙引號)、物件(object,這就是為什麼可以出現嵌套結構的原因),以及代表什麼都沒有的null值。
陣列是什麼東西呢,它是用方括號[]來表示一堆資料的達表方式,通常這些資料通常都被拿來表達性質相近的東西,例如:
[1,2,3,4,5]
["google",”yahoo”,"microsoft","facebook"]
所以,如果上面點餐的例子來改寫,我們假定這家速食店買咖啡送果汁,所以drink這一欄放的就不是單項的東西,那就適合用陣例來儲存:
{"combo1":{"burger":"cheseburger","drink":["coffee","orange-juice"]}}
陣列是比較難理解的部份,不過其實也就是這樣而已。
接下來就是數字了,這個就簡單多了。讓我們幫一號餐加上價格:
{"combo1":{"burger":"CheeseBurger ","drink":["coffee","orange-juice"],"price":120}}
數字就是數字囉,不用加上雙引號,直接放上去就是了。
我們還可以玩得更複雜一點,應用剛剛說的陣列,如果這個菜號有一號餐,通常就會有二號餐、三號餐了,我們一樣可以用嵌套的方式來應用。
{"meal":[{"combo1":{...}},{"combo2":{...}},{"combo3":{...}}}]}
一樣,要用JSON就要先有個物件容器,然後我要表達的是所有餐點的列表,所以就是:
{"meal":value}
只是這個vaule是陣列,裡面放了三餐點,用白話來表達就是:
{"meal": [一號餐, 二號餐,三號餐] }
變成JSON的表達方式,就是
{"meal": [
{"combo1":value},
{"combo2":value},
{"combo3":value}
]
}
然後上面的value,都是相同的結構{"burger":value,"drink":value,"price":value}:
{"meal": [
{"combo1":{"burger":value,"drink":value,"price":value}},
{"combo2": {"burger":value,"drink":value,"price":value}},
{"combo3": {"burger":value,"drink":value,"price":value}}
]
}
最後,再把實際的餐點內容填入:
{"meal": [
{"combo1":{
"burger": "CheeseBurger" ,
"drink": ["coffee","orange-juice"] ,
"price":120}
},
{"combo2": {
"burger":"Big Mac",
"drink":["milk-tea","orange-juice"],
"price":130}
},
{"combo3": {
"burger":"McChicken",
"drink":["Cola","milk-tea","ice-coffee"],
"price":160}
}
]
}
JSON就是這樣子的東西而已。再複雜的結構,就是這些元素在嵌套來、嵌套去。
以上就是白話說JSON,謝謝收看。