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();