1. 程式人生 > >fastJson用法示例

fastJson用法示例

平時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);
    }

}