背景
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);
成功了。
問題
我嘗試了一下另外的方法,沒有成功,大神們幫我看看呀。也是同樣的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);
嘗試了兩種調用,但是都報錯了。

我附上源代碼,求大神賜教。
http://pan.baidu.com/s/1o65BB6a
小弟在此謝過了。
轉載請注明出處:http://www.cnblogs.com/yydcdut/p/3688217.html

