天天看點

Gson解析複雜Json資料

背景                                                                  

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,

            "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      

作者:我愛物聯網

出處:http://yydcdut.cnblogs.com/

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。

下一篇: Java 集合