开发中遇到的问题,记录一下。
服务器返回的json数据格式:
{
"150天以上长库龄":{
"Data":[
{
"caramsrp":378000,
"carappcode":"2787",
"carstate":"未卖",
"carstockage":287,
"carvin":"WDDSJ4GB0FN280001",
"carinncode ":"4804",
"modeldetail":"CLA260 4MATIC"
},
{
"caramsrp":322900,
"carappcode":"2650",
"carstate":"未卖",
"carstockage":239,
"carvin":"WDDSJ4GB0FN280002",
"carinncode ":"4651",
"modeldetail":"CLA220 4MATIC"
},
{
"caramsrp":287000,
"carappcode":"2650",
"carstate":"未卖",
"carstockage":208,
"carvin":"WDDSJ4GB0FN280003",
"carinncode ":"4151",
"modeldetail":"CLA 200 Style"
}
]
}
}
我们想要的是集合,但是这时候却不能直接转化为集合,会报错。
如果用Gson
Gson gson = new Gson();
mStockListInfo = gson.fromJson(json, new TypeTokenList>() {}.getType());
报错如下:
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2
如果用jackson
报错如下:
com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.util.ArrayList out of START_OBJECT token
总之,是不能直接解析为我们想要的集合的。
解决如下:
String json = (String) msg.obj;
try {
if( null != mStockListInfo ){
mStockListInfo.clear();
}
JSONObject jsonObject = new JSONObject(json) .getJSONObject("150天以上长库龄");
JSONArray jsonArray = jsonObject.getJSONArray("Data");
for(int i=0;i<jsonArray.length();i++){
JSONObject jsonObject2 = (JSONObject)jsonArray.opt(i);
StockDetailsInfo info = new StockDetailsInfo();
info.setModeldetail(jsonObject2.getString("modeldetail"));
info.setCarstockage(jsonObject2.getString("carstockage"));//库龄
info.setCarappcode(jsonObject2.getString("carappcode"));//外观代码
info.setCarinncode(jsonObject2.getString("carinncode"));//内饰
info.setCaramsrp(jsonObject2.getString("caramsrp"));//msrp
info.setCarstate(jsonObject2.getString("carstate"));//状态
info.setCarvin(jsonObject2.getString("carvin"));
mStockListInfo.add(info);
}
通过手动解析即可得到我们想要的List集合。