2013-10-10 206 views
2
{ 
"status_code": 200, 
"status_text": "Success", 
"count": 96, 
"data": [ 
    { 
     "model": "Spark", 
     "fuel_type": "", 
     "price": "352109", 
     "state": "", 
     "city": "Agartala", 
     "crawl_date": "2013-10-02 05:00:02", 
     "make": "Chevrolet", 
     "variant": "New Spark 1.0 BS4 OBDII" 
    }, 
    { 
     "model": "Spark", 
     "fuel_type": "", 
     "price": "378914", 
     "state": "", 
     "city": "Agartala", 
     "crawl_date": "2013-10-02 05:00:03", 
     "make": "Chevrolet", 
     "variant": "New Spark 1.0 LS BS4 OBDII" 
    } 
     ] 
} 

以上是JSON字符串。Gson fromJson解析嵌套json

的等價類的JSON對象如下:

CarPriceResult cpr; 
List<CarData> cd; 
cpr = gson.fromJson(inputLine, CarPriceResult.class); 
cd = cpr.getCarData(); 

對象 「CD」 返回null,因此:

public class CarPriceResult { 
private int status_code; 
private String status_text; 
private int count; 
private List<CarData> CarData; 

public CarPriceResult() { 
    super(); 
} 

public int getStatus_code() { 
    return status_code; 
} 

public void setStatus_code(int status_code) { 
    this.status_code = status_code; 
} 

public String getStatus_text() { 
    return status_text; 
} 

public void setStatus_text(String status_text) { 
    this.status_text = status_text; 
} 

public int getCount() { 
    return count; 
} 

public void setCount(int count) { 
    this.count = count; 
} 

public List<CarData> getCarData() { 
    return this.CarData; 
} 

public void setCarData(List<CarData> carData) { 
    this.CarData = carData; 
} 

public static class CarData { 
private String model; 
private String fuel_type; 
private String state; 
private String city; 
private String crawl_date; 
private String make; 
private String variant; 
public String getModel() { 
    return model; 
} 
public CarData() { 
    super(); 
} 
public void setModel(String model) { 
    this.model = model; 
} 
public String getFuel_type() { 
    return fuel_type; 
} 
public void setFuel_type(String fuel_type) { 
    this.fuel_type = fuel_type; 
} 
public String getState() { 
    return state; 
} 
public void setState(String state) { 
    this.state = state; 
} 
public String getCity() { 
    return city; 
} 
public void setCity(String city) { 
    this.city = city; 
} 
public String getCrawl_date() { 
    return crawl_date; 
} 
public void setCrawl_date(String crawl_date) { 
    this.crawl_date = crawl_date; 
} 
public String getMake() { 
    return make; 
} 
public void setMake(String make) { 
    this.make = make; 
} 
public String getVariant() { 
    return variant; 
} 
public void setVariant(String variant) { 
    this.variant = variant; 
} 
} 
} 

該代碼使用GSON是如下JSON轉換成Java NPE被拋出。

我做錯了什麼?

回答

1

問題出在inputLine
此代碼的工作以及

String str = "{ \"status_code\": 200, \"status_text\": \"Success\", \"count\": 96, \"data\": [ { \"model\": \"Spark\",\"fuel_type\": \"\", \"price\": \"352109\", \"state\": \"\", \"city\": \"Agartala\", \"crawl_date\": \"2013-10-02 05:00:02\", \"make\": \"Chevrolet\", \"variant\": \"New Spark 1.0 BS4 OBDII\" }, { \"model\": \"Spark\", \"fuel_type\": \"\", \"price\": \"378914\", \"state\": \"\", \"city\": \"Agartala\", \"crawl_date\": \"2013-10-02 05:00:03\", \"make\": \"Chevrolet\", \"variant\": \"New Spark 1.0 LS BS4 OBDII\" } ] }"; 
CarPriceResult cpr = new Gson().fromJson(str, CarPriceResult.class); 
List<CarData> cd = cpr.getCarData(); 

編輯:
此外,您的JSON不符合類映射
JSON:

"data": [ 

類CarPriceResult

private List<CarData> CarData; 

您應該將字段重命名爲data或將json中的密鑰更改爲CarData
例如
JSON:

"data": [ 

類CarPriceResult

private List<CarData> data; 
+0

這仍然沒有幫助我,就像你提到的後,我硬編碼 「海峽」。 CarData仍顯示爲空。 inputLine是使用reader從http數據API中檢索的。 'code'BufferedReader in = new BufferedReader(new InputStreamReader(urlConn.getInputStream())); \t \t \t \t String inputLine = in.readLine(); – user2867209

+0

@ user2867209答案編輯 – Ilya

+0

我的英雄,這是你指出的「數據」的問題。由於害怕學習JSON + GAE(PaaS)+ Gson + APIHub,我失去了你正確指出的那些小事。萬分感謝! – user2867209