对接PHP后台返回的数据,json数据是动态数据。
json如下所示:
由于可变性,我们需要一层一层去拨开,把我们需要的数据进行拆解下来封装我们需要的类型。
代码如下:
List<HashMap<String, List<HistoryBean>>> datalist = new ArrayList<>();
String strJson = (String) object;
try {
//转换成jsonObject
JSONObject jsonObject = (JSONObject) JSON.parse(strJson);
JSONObject jsonArray = jsonObject.getJSONObject("data");
for (Map.Entry<String, Object> entry : jsonArray.entrySet()) {
JSONObject jsonObject1 = (JSONObject) entry.getValue();
JSONArray jsonArray1 = jsonObject1.getJSONArray("historys");
String month = jsonObject1.getString("month");
String json = jsonArray1.toJSONString();
List<HistoryBean> list = JSONObject.parseArray(json, HistoryBean.class);
HashMap<String, List<HistoryBean>> hashMap = new HashMap<>();
hashMap.put(month,list);
datalist.add(hashMap);
Log.e(TAG,"datalist:"+datalist);
}
} catch (JSONException e) {
e.printStackTrace();
}
其中整理一下各种类型之间的转换
.1.fastjson List转JSONArray
List<T> list = new ArrayList<T>();
JSONArray array= JSONArray.parseArray(JSON.toJSONString(list));
2.fastjson JSONArray转List
JSONArray array = new JSONArray();
List<EventColAttr> list = JSONObject.parseArray(array.toJSONString(), EventColAttr.class);
3.fastjson 字符串转List
String str = "";
List<T> list = JSONObject.parseArray(str,T.class);
由于长时间没有使用fastJson,便去回味一下API.
fastjson API 入口类是com.alibaba.fastjson.JSON
public static final Object parse(String text); // 把JSON文本parse为JSONObject或者JSONArray
public static final JSONObject parseObject(String text); // 把JSON文本parse成JSONObject
public static final <T> T parseObject(String text, Class<T> clazz); // 把JSON文本parse为JavaBean
public static final JSONArray parseArray(String text); // 把JSON文本parse成JSONArray
public static final <T> List<T> parseArray(String text, Class<T> clazz); //把JSON文本parse成JavaBean集合
public static final String toJSONString(Object object); // 将JavaBean序列化为JSON文本
public static final String toJSONString(Object object, boolean prettyFormat); // 将JavaBean序列化为带格式的JSON文本
public static final Object toJSON(Object javaObject); //将JavaBean转换为JSONObject或者JSONArray。
遇到问题:
com.alibaba.c.JSONException: default constructor not found. class
解决:
由于经常使用gsonFormat,忘记添加构造方法,只要在其中添加无参构造方法。