因有朋友想了解一下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,谢谢收看。