将JSON映射到Java对象

时间:2016-12-10 05:47:43

标签: java json gson

我有这些类型的JSON对象,我从gridx过滤器表达式中获取:

{
  "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"
        }
      ]
    }
  ]
}

如何将其映射到Java对象,然后使用Gson反序列化?

我已经完成了这两个课程:

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;
    }
}

问题是我有ObjectString类型的数据。我是否需要使用自定义TypeAdapter

1 个答案:

答案 0 :(得分:1)

将您的数据结构设为

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 + "]";
    }

}

我使用谷歌GSON库解析了JSON文件。这是maven repository

注意:要使用GSON库添加&#39; [&#39;在开始和&#39;]&#39;在结束。

我已阅读JSON文件并将数据存储在ArrayList中。希望在获得数组列表后你可以进行序列化。

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