平时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>872822645@qq.com
* <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>872822645@qq.com
* <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>872822645@qq.com
* <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);
}
}
以下为 FastJsonUtils 的代码:
package com.example.sunlei.map;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.alibaba.fastjson.serializer.SerializerFeature;
import java.io.IOException;
/**
* <p>create by sunlei on 2018/7/5
* <p>872822645@qq.com
* <p>Describe : puclic class for json and module interconversion by fastjson
*/
public class FastJsonUtils {
/**
*
* @param object
* @return model转为json
* @throws IOException
*/
public final static String toJsonString(Object object) throws IOException {
return JSON.toJSONString(object);
}
/**
*
* @param object
* @return model转为json
* @throws IOException
*/
public final static String toJsonString(Object object, SerializerFeature serializerFeature) throws IOException {
return JSON.toJSONString(object, serializerFeature);
}
/**
*
* @param json
* @param clazz
* @param <T>
* @return json转为model 这种适用于不嵌套model的model
* @throws IOException
*/
public final static <T> T fromStringJson(String json, Class<T> clazz) throws IOException {
return JSON.parseObject(json, clazz);
}
/**
*
* @param json
* @param
* @param <T>
* @return json转为model 这种适用于model内部还有model情况
* @throws IOException
*/
public final static <T> T fromStringJson(String json, TypeReference<T> valueTypeRef) {
return JSON.parseObject(json, valueTypeRef);
}
}