java实体和json的互转

一、json转java实体

json格式的数据转java实体:http://www.bejson.com/json2javapojo/new/

本人是在这个基础上面再次进行实体的封装

源数据如下

[{"obj2": {
        "geometry": "POLYGON ((102.609458921 25.0533587, 102.609212857 25.05333837))",
        "properties": {
            "DLBZ": "",
            "EG_N_RID": "",
            "OPYEAR": "2016",
                   }
    },
    "obj1": {
        "geometry": "POLYGON ((102.609302507 25.051982325, 102.60912423 25.052274094, 102.609118412 25.052443891))",
        "properties": {
            "DLBZ": "",
            "EG_N_RID": "",
            "OPYEAR": "2016",
                   }
    }
},{
    "obj2": {
        "geometry": "POLYGON ((102.609458921 25.0533587, 102.609212857 25.05333837))",
        "properties": {
            "DLBZ": "",
            "EG_N_RID": "",
            "OPYEAR": "2016",
                   }
    },
    "obj1": {
        "geometry": "POLYGON ((102.609302507 25.051982325, 102.60912423 25.052274094, 102.609118412 25.052443891))",
        "properties": {
            "DLBZ": "",
            "EG_N_RID": "",
            "OPYEAR": "2016",
                   }
    }
}]

这是一个json数组,里面有两个花括号括起来的两个对象,我们可以把外面的数组设置成一个list1,里面的两个对象又是一个list2,list2对应着一个自增的id,每个list2里面又有obj(i)(1<i<n)个对象。每个obj里面有一geometry字符串和Properties实体对象。进行了多层封装后得到

第一步:json转实体

Properties

import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;

import java.io.Serializable;
import java.util.Date;

/**
 * 图斑属性的实体
 * Created by zhanglu on 2018/9/27.
 */

public @Data
class Properties implements Serializable {
    private static final long serialVersionUID = 1L;
    @JSONField(name = "DLBZ")
    private String DLBZ;
    @JSONField(name = "EG_N_RID")
    private String EG_N_RID;
    @JSONField(name = "OPYEAR")
    private String OPYEAR;
}

Obj

import lombok.Data;

import java.io.Serializable;

/**
 * 地类图斑的实体
 * Created by zhanglu on 2018/9/27.
 */
public @Data
class Obj implements Serializable {
    private static final long serialVersionUID = 1L;
    private String geometry;
    private Properties properties;

}

objArray

import lombok.Data;

import java.util.List;

/**
 * Created by zhanglu on 2018/9/27.
 */
public @Data
class ObjArray {
    private Integer id;
    private List<Obj> objList;
}

第二步:json变实体接收,将json字符串转成java对象,下面org就是上面的json数组加两个引号的字符串。

 List<Obj> objList = null;
 ObjArray objArray = null;
//List是一个接口,必须由他的实现类来进行实例化,在进行add的时候如果没有实例化就会报空指针
 List<ObjArray> objArrays = new ArrayList<>();
JSONArray orgArr = JSONArray.parseArray(org);
                        //   json字符串转java实体
                        //  获取每一个地块,转为jsonObject
                        for (int i = 0; i < orgArr.size(); i++) {
                            String responseString = orgArr.getString(i);
                            log.info(responseString.toString());
                            JSONObject response = (JSONObject) JSONObject.parseObject(orgArr.getString(i));
//                            获取每一个地块的图斑对象
                            objList = new ArrayList<Obj>();
                            for (Map.Entry<String, Object> entry : response.entrySet()) {
                                Obj obj = (Obj) JSONObject.toJavaObject((JSONObject) entry.getValue(), Obj.class);
                                log.info(obj.toString());
                                objList.add(obj);
                            }
//注意在哪里用到了对象要及时的new对象,不然对象会被覆盖
                            objArray = new ObjArray();
                            objArray.setId(i + 1);
                            objArray.setObjList(objList);
                            objArrays.add(objArray);
                        }
                        //   end  json字符串转java实体

二、java转json

      需求是我要把上面的java实体里面的里面的propertie。s里面的key全部取出来给他,变为一个jsonArray,jsonArray里面的key和value都是properties的key。因为我前端有一个合并单元格的操作,合并的依据就是objArray的id一样的就给它合并为一行。一个obj里面的properties的value值就是前端显示列表的一行数据。我们new一个jsonArray,然后new一个jsonObject,

1.获取前端要展示的列名:弄了一个bool变量,如果添加完第一列数据(列名),就将addColDone设置成true。将list2里面的对象的propties反编译,获取属性值先put进去一个jsonObject然后在put进去一个jsonArray。

2.获取前端要展示的列表数据:接着讲列表除列名外的其他数据,获取到properties对象,先转成jsonString,然后在转成jsonObject,然后在add进去jsonArray。

 JSONArray cols = new JSONArray();
        JSONArray dataList = new JSONArray();
        boolean addColDone = false;
        for (ObjArray obja: data) {
            int _index=obja.getId();
            List<Obj> objs = obja.getObjList();
            for (Obj obj: objs) {
                if (!addColDone) {
                    JSONObject columns = new JSONObject();
                    columns.put("title", "No.");
                    columns.put("key", "no");
                    cols.add(columns);
                    columns = new JSONObject();
                    columns.put("title", "图斑名称");
                    columns.put("key", "layerName");
                    cols.add(columns);
                    columns = new JSONObject();
                    columns.put("title", "操作");
                    columns.put("key", "operation");
                    cols.add(columns);
                    Properties props = obj.getProperties();
                    Field[] fields=props.getClass().getDeclaredFields();
                    for(int i=0;i<fields.length;i++){
                        JSONObject col = new JSONObject();
                        col.put("title", fields[i].getName());
                        col.put("key", fields[i].getName());
                        cols.add(col);
                    }
                    JSONObject tableProps = JSON.parseObject(JSONObject.toJSONString(props));
                    tableProps.put("no", _index);
                    tableProps.put("layerName", "图斑"+_index);
                    tableProps.put("operation", "点亮图斑"+_index);
                    tableProps.put("geometry", obj.getGeometry());
                    dataList.add(tableProps);
                    addColDone = true;
                } else {
                    Properties props = obj.getProperties();
                    JSONObject tableProps = JSON.parseObject(JSON.toJSONString(props));
                    tableProps.put("no", _index);
                    tableProps.put("layerName", "图斑"+_index);
                    tableProps.put("operation", "点亮图斑"+_index);
                    tableProps.put("geometry", obj.getGeometry());
                    dataList.add(tableProps);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值