序:本文的读者对象可以是第一次接触Json数据并且想用Gson来简单实现Json数据的解析(Json数据可以转化成对象,对象亦可转化成Json数据)的新手,也可以是已有工作经验并不吝赐教的前辈。如果你是苦苦寻找更好地技术,正如本文标题所言,这篇文章可能不适合你。希望本篇能为新手们带来“众里寻他千百度,蓦然回首,那人却在灯火阑珊处”的发现,也能为有经验的前辈们带来那时年少的感觉。衷心希望你是耐心地愉快地读完本文!
0 偶遇JSON
{
“flag”:”00”,
“message”:”传感器”,
“property“:{“voltage”:”10V”,
“current”:”5A”},
“sensors”:[{“Date”:”time”,
”id”:”1527”}],
}
在这里还可见到更多的他:
http://www.tlink.io/web/developer-documentation-all.htm?type=1#api_1
1 认识JSON格式
JSON数据本质上是一种字符串,不过这个字符串有其特定的格式,一种分层形式的格式。最基本(最内层)的格式是键值对模型(如果不明白的话可以看看本文后面的附1,也可以在网上搜索相关内容,不过即使现在不清楚也不用着急,这不影响你理解JSON的数据形式),只是键需要被双引号包围,如:”Name0”:”lixiaobing0”,其中Name0为键,lixiaobing0为值,键和值都是自己定义的。这就是基本形式,为了下面的叙述的方便,以自己定义的符号base-type来代替”Name0”:”lixiaobing0”这个基本形式,这种代替是为了更方便地了解到JSON数据的全貌。于是细心的我们会看到,一个JSON数据里可以不止一个基本形式,可以有许多个,不过这些个基本形式之间要以逗号(,)分隔的,比如:base-type,base-type,┅。
如果将视野放得开阔点就会看到,这些基本形式可以被花括符{}或者中括号[]包围,如:{base-type}或者[base-type]。当然也可以被{}和[]同时包围,如:[{base-type}],但同时也要注意到,[{base-type}]形式里也可以有多个{base-type}形式,这些个{base type}形式之间以逗号(,)分隔,如:[{base-type},{base-type},{base type},┅],这和一个JSON数据里有多个基本形式是一样的。
通常,我们称被{}包围的数据为一个对象,被[]包围的数据我们成为数组,有一点要明白,不同对象的键都是一样的,不同的只是值,正如不同的人有不同性格爱好以及身高体重罢了。好了,我们跳出符号[]的限制,来到[]的外边看看,我们又会惊奇的发现这样的形式,”my_Array”:[{base-type},{base-type},{base type},┅],和这样的形式,”Object”:{base-type,base-type,┅},确实挺有意思,细细一看这不正和基本形式保持了一致吗。于是,用符号Array[]来代替”my_Array”:[{base-type},{base-type},{base-type},┅],用符号Object{}来代替”Object”:{base-type,base-type,┅}后,我们就看到了最外层的情况是这样的{ Object{},Array[],base-type}。
最外层的{}符号不能少,并且符号{} 里的Array[]、base-type和Object{}的数量都是任意的,可以为零,也可很多,也没什么顺序,更重要的是,Array[]和Object{}可以相互融合,做到你中有我,我中有你,即:Array[Object{}],Object{Array[]},这也被称为嵌套,嵌套可以多层,就像你的镜里有我的镜,我的镜里有你,镜里的还是镜,如此反复映射,不过嵌套多少层,映射多少次,当然这些都要视具体情况而定。注意到了吗,视具体情况而定,毕竟数据要用在某个场合里,至于如何用JSON数据这个问题将在后面JSON数据解析的部分讲解,这里还得举举JSON数据格式的例子,让我们具体感受一下JSON的魅力。
我会从简单到复杂,从单层到多层的顺序来举例子,因为这样也是符合人接受新事物的顺序。这些例子我是站在最基本形式的角度来阐述的,你也可以把自己当做最基本的形式,这样就可以经历一次有趣的旅程了。
1.1 最简洁的JSON数据(我也称为孤单的基本形式)
{”Name0”:”lixiaobing0”}
1.2 不再孤单的基本形式
{
”Name0”:”lixiaobing0”
”Name1”:”lixiaobing1”,
”Name2”:”lixiaobing2”,
... ...
}
1.3 从未见过的新伙伴age_Array
{
”age_Array”:[{”Age0”:”beautiful_24”}],
”Name0”:”lixiaobing0”
”Name1”:”lixiaobing1”,
”Name2”:”lixiaobing2”,
... ...
}
1.4 新伙伴不止秀一面
{
”age_Array”:[{”Age0”:”beautiful_24”,
”Age1”:”terrible_24”,
”Age2”:”wonderful_24”,
... ...}],
”Name0”:”lixiaobing0”
”Name1”:”lixiaobing1”,
”Name2”:”lix