简体   繁体   English

将JSON映射到Java对象

[英]Map JSON to Java object

I have these type of JSON object which I'm getting from gridx filter expression: 我有从Gridx过滤器表达式中得到的这些类型的JSON对象:

{
  "op": "or",
  "data": [
    {
      "op": "contain",
      "data": [
        {
          "op": "string",
          "data": "id",
          "isCol": true
        },
        {
          "op": "string",
          "data": "sdfv"
        }
      ]
    },      
    {
      "op": "contain",
      "data": [
        {
          "op": "string",
          "data": "post",
          "isCol": true
        },
        {
          "op": "string",
          "data": "sdfv"
        }
      ]
    },
    {
      "op": "contain",
      "data": [
        {
          "op": "string",
          "data": "birthday",
          "isCol": true
        },
        {
          "op": "string",
          "data": "sdfv"
        }
      ]
    }
  ]
}

How I can map this to a Java object and then deserialize using Gson? 如何将其映射到Java对象,然后使用Gson反序列化?

I've made these two classes: 我完成了这两节课:

package dto.Filter;

public class FilterData extends FilterExpression {
    private String op;
    private boolean isCol;
    private String data;

    public String getOp() {
        return op;
    }

    public void setOp(String op) {
        this.op = op;
    }

    public boolean isCol() {
        return isCol;
    }

    public void setCol(boolean col) {
        isCol = col;
    }

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }
}

package dto.Filter;

import java.util.List;

public class FilterExpression {
    private List<FilterData> filters;
    private String op;

    public List<FilterData> getFilters() {
        return filters;
    }

    public void setFilters(List<FilterData> filters) {
        this.filters = filters;
    }

    public String getOp() {
        return op;
    }

    public void setOp(String op) {
        this.op = op;
    }
}

The problem is that I have both data as Object and String type. 问题是我同时具有ObjectString类型的数据。 Do I need to use my custom TypeAdapter ? 我需要使用自定义TypeAdapter吗?

Make your data structure as 使您的数据结构为

class DataStructure {

    private String op;
    private String data;
    private String isCol;

    public DataStructure(){

        op="";
        data="";
        isCol="";
    }

    public String getOp() {
        return op;
    }

    public void setOp(String op) {
        this.op = op;
    }

    public String getData() {
        return data;
    }

    public void setData(String data) {
         this.data = data;
    }

    public String isCol() {
        return isCol;
    }

    public void setCol(String isCol) {
        this.isCol = isCol;
    }

    @Override
    public String toString() {
        return "DataStructure [op=" + op + ", data=" + data + ", isCol=" + isCol + "]";
    }

}

I have parse the JSON file using google GSON library. 我已经使用Google GSON库解析了JSON文件。 Here is maven repository . 这是Maven仓库

Note: to read using GSON library add '[' at starting and ']' at ending. 注意:要使用GSON库阅读,请在开头添加'[',在结尾添加']'。

I have read the JSON file and store the data in ArrayList. 我已经阅读了JSON文件并将数据存储在ArrayList中。 Hope after getting array list you can do serialization. 希望在获取数组列表后可以进行序列化。

public class FilterData {

    private static Gson gson = new Gson();
    private static JsonParser parser = new JsonParser();

    public static List<DataStructure> getData(List<DataStructure> datas){

        List<DataStructure> result = new ArrayList<>();

        for (DataStructure data : datas) {

            for (JsonElement object : parser.parse(data.getData()).getAsJsonArray()) {

                DataStructure dataStructure = new DataStructure();

                JsonObject jObject = gson.fromJson(object, JsonObject.class);

                dataStructure.setOp(jObject.get("op").toString());
                dataStructure.setData(jObject.get("data").toString());

                if (jObject.has("isCol"))
                    dataStructure.setData(jObject.get("isCol").toString());

               System.out.println(dataStructure);
               result.add(dataStructure);
            }
        }

        return result;

    }

    public static void main(String[] args) throws FileNotFoundException {

        JsonReader reader = new JsonReader(new InputStreamReader(new FileInputStream("input.json")));

        List<DataStructure> datas = new ArrayList<>();

        JsonArray jArray = parser.parse(reader).getAsJsonArray();

        for (JsonElement object : jArray) {

            DataStructure dataStructure = new DataStructure();

            JsonObject jObject = gson.fromJson(object, JsonObject.class);

            dataStructure.setOp(jObject.get("op").toString());
            dataStructure.setData(jObject.get("data").toString());

             if (jObject.has("isCol"))
                 dataStructure.setData(jObject.get("isCol").toString());

            System.out.println(dataStructure);
            datas.add(dataStructure);
        }

        List<DataStructure> insideData = getData(datas);
        List<DataStructure> inside2Data = getData(insideData);
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM