Gson解析复杂Json数据

时间:2021-09-26 00:27:53

背景                                                                  

json是一种数据格式,便于数据传输、存储、交换。

gson是一种组件库,可以把java对象数据转换成json数据格式。

推荐一个Json判别对错的网站:http://jsonlint.com/

因为我在写程序的时候碰到了我自己写的json有错,然后我还不以为然,知道一直报错死活不成功才去网上搜网站查json的正确格式。

我写的是android的程序,用到的是Gson包,开头用的1.6的包,老是报错,换成最新的2.2.4就没有错了。

最新下载地址:https://code.google.com/p/google-gson/downloads/list

代码                                                                   

我要解析的Json数据为:

private String jsonData = "[{\"name\":\"Michael\",\"age\":20,\"address\":{\"Long_name\":\"4long\",\"short_name\":\"4short\"}},{\"name\":\"Mike\",\"age\":21,\"address\":{\"Long_name\":\"1long\",\"short_name\":\"1short\"}}]";

即:

[
    {
        "name": "Michael",
        "age": 20,
        "address": {
            "Long_name": "4long",
            "short_name": "4short"
        }
    },
    {
        "name": "Mike",
        "age": 21,
        "address": {
            "Long_name": "1long",
            "short_name": "1short"
        }
    }
]

array.java

package com.yuyidong.json;

import java.io.StringReader;

import android.util.JsonReader;

public class array {

    public array() {
// TODO 自动生成的构造函数存根
} public void parseJson(String jsonData)
{
JsonReader reader = new JsonReader(new StringReader(jsonData));
try
{
reader.beginArray();
while(reader.hasNext())
{
reader.beginObject();
//Session session = new Session();
while(reader.hasNext())
{
String tagName = reader.nextName();
if(tagName.equals("name"))
{
System.out.println("name--->" + reader.nextString());
}
else if(tagName.equals("age"))
{
System.out.println("age--->" + reader.nextInt());
}
else if(tagName.equals("address"))
{
reader.beginObject();
while(reader.hasNext())
{
String tagName2 = reader.nextName();
if (tagName2.equals("Long_name"))
{
System.out.println("long_name--->" + reader.nextString());
}
else if (tagName2.equals("short_name"))
{
System.out.println("short_name--->" + reader.nextString());
}
}
reader.endObject();
}
}
reader.endObject();
} reader.endArray();
}
catch (Exception e)
{
// TODO 自动生成的 catch 块
e.printStackTrace();
System.out.println("BAD");
}
finally
{
try {
reader.close();
} catch (Exception e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
} }
在主文件调用,建立一个Button的监听器,在监听器中完成。
array array_json = new array();
array_json.parseJson(jsonData);
Gson解析复杂Json数据
成功了。
 

问题

我尝试了一下另外的方法,没有成功,大神们帮我看看呀。也是同样的Json。
address.java
package com.yuyidong.json;

public class address {
private String Long_name;
private String short_name; public String getlong_name()
{
return Long_name;
}
public void setlong_name(String Long_name)
{
this.Long_name = Long_name;
} public String getshort_name()
{
return short_name;
}
public void setshort_name(String short_name)
{
this.short_name = short_name;
} @Override
public String toString() {
// TODO 自动生成的方法存根
return "Long_name--->"+getlong_name()+"\nshort_name--->"+getshort_name();
} }
JsonUtils.java
package com.yuyidong.json;

import java.util.List;

public class JsonUtils {

    private String name;
private int age;
private List<address> address; public String getname() {
return name;
} public void setname(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public List<address> getaddress() {
return address;
} public void setaddress(List<address> address) {
this.address = address;
} @Override
public String toString() {
// TODO 自动生成的方法存根
return "name--->"+getname()+"\n age--->"+getAge()+"\n address--->"+getaddress();
}
}
在主文件调用,建立一个Button的监听器,在监听器中完成。
//Type type = new TypeToken<List<JsonUtils>>(){}.getType();
//Gson gson = new Gson();
//List<JsonUtils> jsonutils = gson.fromJson(jsonData, type);
//System.out.println(jsonutils.toString());
Gson gson = new Gson();
JsonUtils jsonUtils = gson.fromJson(jsonData, JsonUtils.class);
System.out.println(jsonUtils);
尝试了两种调用,但是都报错了。

Gson解析复杂Json数据


我附上源代码,求大神赐教。
http://pan.baidu.com/s/1o65BB6a
小弟在此谢过了。
 
 
 
转载请注明出处:http://www.cnblogs.com/yydcdut/p/3688217.html