在绝大多数的情况下,在访问服务端的数据时候,服务端往往会返回一大堆的json数据给我们,如何又快又准确的解析这些数据并将之展示在界面上就显得非常重要了。
我们可以选择JSONObjec 来解析,但是针对一些复杂的数据,推荐使用第三方工具fastjson或是 gson来解析。但是在用这些jar包之前,最为关键的一点是:如何正确的将数据封装成javabean。
现拿已碰到过的2种复杂json数据做说明来封装成bean和解析。
所用到的资源:1.fastjson 或是gson 2.HiJson
先看第一种已经格式化的json数据截图:
news中间还有许多个对象,不过被我简化了,只留了一个对象。现开始从内到外解析:javebean中的代码如下:
public class PictureData {
public PicDataItem data = new PicDataItem();
public String retcode;
public class PicDataItem {
public String countcommenturl;
public String more;
public String title;
public ArrayList<PicNewItem> news = new ArrayList<PicNewItem>();
public ArrayList<String> topic = new ArrayList<String>();
}
public class PicNewItem {
public boolean comment;
public String commentlist;
public String commenturl;
public String id;
public String largeimage;
public String listimage;
public String pubdate;
public String smallimage;
public String title;
public String type;
public String url;
}
}
bean数据封装好之后,开始解析:
@Override
protected void initData() {
// 访问网络获取相关的数据
String url = HttpUtil.HOST + HttpUtil.PICTURE;
HttpUtils httpUtils = new HttpUtils();
RequestCallBack<String> callBack = new MyRequestCallBack();
httpUtils.send(HttpMethod.GET, url, callBack);
}
class MyRequestCallBack extends RequestCallBack<String> {
@Override
public void onSuccess(ResponseInfo<String> responseInfo) {
// 访问网络成功的时候:开始解析数据:
String json = responseInfo.result;
LogUtil.i("hxy", json);
// 对网络获取的数据开始进行解析
Gson gson = new Gson();
PictureData data = gson.fromJson(json, PictureData.class);
// 当用fastjson 解析json数据的时候:
//PictureData data= JSON.parseObject(json,PictureData.class);
第二种复杂数据的解析:
先看服务端返回的数据:
这里的数据和第一种数据有所不同,因为”data“之后紧接的是数字3或是4之类的。其实这是一种集合数据:
先看以下测试代码:
public class Test {
public static void main(String[] args) {
HashMap<String,String> map = new HashMap<String, String>();
map.put("1", "电视");
map.put("2", "冰箱");
map.put("3", "空调");
map.put("4", "洗衣机");
map.put("5", "热水器");
//转化为json数据:
String json = JSON.toJSONString(map);
System.out.println(json);
}
}
打印输出的结果:
{"3":"空调","2":"冰箱","1":"电视","5":"热水器","4":"洗衣机"}
所以可以推出:服务端中的数据是以HashMap返回来的,所以封装成如下bean:
public class BuyGoosData {
public int number;
public double sumPrice;
public HashMap<String,CartItem> data = new HashMap<String,CartItem>();
public static class CartItem{
public GoodsItem good = new GoodsItem();
public int number;
public double price;
}
}
再运用第三方jar包解析即可,步骤和第一种数据的解析步骤相同。