微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > Android Json解析 - 初步

Android Json解析 - 初步

时间:09-12 来源:互联网 点击:

JSON与XML一样都是数据格式,JSON的数据格式比XML更小。这里主讲JSON。

JSON是JavsScript对象符号。

下面是一个简单的JSON格式

{name:zhangsan,age:22,address:太原}

这就是一个对象,里面的值key是冒号前面的类容,value是冒号后面的类容。

JSON还可以有数组的形式,如下:

[{name:zhangsan,age:22,address:太原},

{name:lisi,age:20,address:黄冈},

{name:wangwu,age:21,address:武汉}]

在中括号里全都是对象,这种对象的个数没限制,对象里是键值对。

在JSON对象中还可以有对象,如下:

{

name:zhangsan,age:22,

address:{country:中国,province:山西,city:太原}

}

这就是说address key是一个对象。

这就是JSON的基本形式。

首先下载解析JSON需要的Jar包 下载。这是Google提供解析JSON的开源的Json Jar包。

1.最基础的解析

这种解析式最普遍的,根据JSON的格式来解析,我来解析如下的JSON数据:

{name:zhangsan,age:22,address:太原}

首先

String s={\name\:\zhangsan\,\age\:22,\address\:\太原\};

这里使用反斜杠来使用双引号。

JsonReader reader=new JsonReader(new StringReader(s));

声明一个JsonReader对象,将String s传入。

try {

JsonReader reader=new JsonReader(new StringReader(data));

reader.beginObject();

while(reader.hasNext())

{

String key=reader.nextName();

if(name.equals(key))

{

System.out.println(reader.nextString());

}

if(age.equals(key))

{

System.out.println(reader.nextInt());

}

if(address.equals(key))

{

System.out.println(reader.nextString());

}

}

reader.endObject();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

结果如下:

开始解析的时候调用reader.beginObject();结束的时候调用reader.endObject().应为一个对象里可能有很多的键值对,所以要使用while循环,当对象里的键值对都循环完了的话reader.hasNext()方法返回false。reader.nextXXX()获得你所要的值,XXX为类型。

2.解析数组

下面解析如下的Json数据:

[{name:zhangsan,age:22,address:太原},

{name:lisi,age:20,address:黄冈},

{name:wangwu,age:21,address:武汉}]

如下代码:

try {

JsonReader reader=new JsonReader(new StringReader(data));

reader.beginArray();

while(reader.hasNext())

{

reader.beginObject();

while(reader.hasNext())

{

String key=reader.nextName();

if(name.equals(key))

{

System.out.println(reader.nextString());

}

if(age.equals(key))

{

System.out.println(reader.nextInt());

}

if(address.equals(key))

{

System.out.println(reader.nextString());

}

}

reader.endObject();

}

reader.endArray();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

根据这个Json的数据结构,我先解析数组,所以开始就reader.beginArray();当然还要reader.endArray();同样使用reader.hasNext()来判断数组是否都解析完了。

下面是效果图:

3.包含对象的对象解析

下面我解析如下的Json数据:

{

name:zhangsan,age:22,

address:{country:中国,province:山西,city:太原}

}

废话不多说先来代码:

try {

JsonReader reader=new JsonReader(new StringReader(data));

reader.beginObject();

while(reader.hasNext())

{

String key=reader.nextName();

if(name.equals(key))

{

System.out.println(reader.nextString());

}

if(address.equals(key))

{

reader.beginObject();

while(reader.hasNext())

{

String theKey=reader.nextName();

if(country.equals(theKey))

{

System.out.println(reader.nextString());

}

if(province.equals(theKey))

{

System.out.println(reader.nextString());

}

if(city.equals(theKey))

{

System.out.println(reader.nextString());

}

}

reader.endObject();

}

}

reader.endObject();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

都给解析出来了。

1.解析一个对象

可以直接从Json中将队形解析出来,这个Json必须是一个Json对象,如下:

{name:zhangsan,age:22,address:太原}

它只是一个对象。

我新建一个类,生成get和set方法,如下:

package com.zhycheng;

publicclass Human {

String name,address;

int age;

public String getName() {

return name;

}

publicvoid setName(String name) {

this.name = name;

}

publicint getAge() {

return age;

}

publicvoid setAge(int age) {

this.age = age;

}

pub

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top