平时model和 json 互转 基本都是Gson 或者 fastjson .这里展示是fastjson用法。
大概分为4种情况。1、单一model转为json 2、json转为单一model 3、model内嵌套model 转为json 4、json转为内部嵌套model的model
首先引入 fastjosn
implementation 'com.alibaba:fastjson:1.1.70.android'
首先定义2个 实体model
package com.example.sunlei.map; import com.alibaba.fastjson.annotation.JSONField; import java.io.Serializable; /** * <p>create by sunlei on 2018/11/15 * <p>[email protected] * <p>Describe : //单一model */ public class PoiAddressModel implements Serializable { //@JSONField(name = "name") 这是注释了。如果当前定义字段与要解析json内字段一致。则Ok 。否则需要放开注释 ,单独定义 private String name; // @JSONField(name = "add") private String add; // @JSONField(name = "lat") private double lat; //@JSONField(name = "lon") private double lon; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAdd() { return add; } public void setAdd(String add) { this.add = add; } public double getLat() { return lat; } public void setLat(double lat) { this.lat = lat; } public double getLon() { return lon; } public void setLon(double lon) { this.lon = lon; } }
package com.example.sunlei.map; import com.alibaba.fastjson.annotation.JSONField; import java.util.ArrayList; import java.util.List; /** * <p>create by sunlei on 2018/11/15 * <p>[email protected] * <p>Describe : //内部嵌套其它model */ public class PoiAddressListModel<T> { // @JSONField(name = "data") private List<T>data=new ArrayList<>(); public List<T> getData() { return data; } public void setData(List<T> data) { this.data = data; } }
下面直接展示对上面2个model为基础的展示用法:
package com.example.sunlei.demo; import android.app.Activity; import android.os.Bundle; import android.support.annotation.Nullable; import android.util.Log; import com.alibaba.fastjson.TypeReference; import com.example.sunlei.map.FastJsonUtils; import com.example.sunlei.map.PoiAddressListModel; import com.example.sunlei.map.PoiAddressModel; import com.example.sunlei.map.PoiAddressNewModel; import com.example.sunlei.map.ToastUtils; import java.io.IOException; import java.util.ArrayList; import java.util.List; /** * <p>create by sunlei on 2018/11/16 * <p>[email protected] * <p>Describe : */ public class DemoFastJson extends Activity { List<PoiAddressModel>dataArray=new ArrayList<>(); PoiAddressModel poiAddressModel1; PoiAddressModel poiAddressModel2; String data1;//把model转为json PoiAddressModel poiAddressModelnew;//把json转回model String datalist;//把model转为json PoiAddressListModel poiAddressListModel; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); initData(); try { //单层model转String data1= FastJsonUtils.toJsonString(poiAddressModel1); //String 转 Model poiAddressModelnew = FastJsonUtils.fromStringJson(data1,PoiAddressModel.class); } catch (IOException e) { e.printStackTrace(); ToastUtils.showLong(DemoFastJson.this,"失败"); } double lat=poiAddressModelnew.getLat(); dataArray.add(poiAddressModel1); dataArray.add(poiAddressModel2); PoiAddressListModel poiAddressListModel=new PoiAddressListModel(); poiAddressListModel.setData(dataArray); try { //model 嵌套之后转 String datalist= FastJsonUtils.toJsonString(poiAddressListModel); // String 解析为 多层嵌套的 model poiAddressListModel= FastJsonUtils.fromStringJson(datalist,new TypeReference<PoiAddressListModel<PoiAddressNewModel>>(){}); } catch (IOException e) { e.printStackTrace(); } List<PoiAddressNewModel> list=poiAddressListModel.getData(); ToastUtils.showLong(DemoFastJson.this,list.get(0).getNewname()); Log.d("result","data1"+data1); Log.d("result","datalist"+datalist); Log.d("result","list"+list.size()+""); // Log.d("result",list.size()+""); } /** * 初始化数据 */ private void initData(){ poiAddressModel1= new PoiAddressModel(); poiAddressModel1.setAdd("北京朝阳"); poiAddressModel1.setName("国贸"); poiAddressModel1.setLat(10); poiAddressModel1.setLon(20); poiAddressModel2= new PoiAddressModel(); poiAddressModel2.setAdd("北京四惠"); poiAddressModel2.setName("八通线"); poiAddressModel2.setLat(50); poiAddressModel2.setLon(100); } }