背景
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);
嘗試了兩種調用,但是都報錯了。
我附上源代碼,求大神賜教。
http://pan.baidu.com/s/1o65BB6a
小弟在此謝過了。
轉載請注明出處:http://www.cnblogs.com/yydcdut/p/3688217.html
作者:我愛物聯網
出處:http://yydcdut.cnblogs.com/
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。