java - 将 JSON 映射到 Java 对象

标签 java json gson

我有从 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"
        }
      ]
    }
  ]
}

如何将其映射到 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 吗?

最佳答案

将数据结构设为

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 库进行读取,请在开头添加“[”,在结尾添加“]”。

我已读取 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);
    }
}

关于java - 将 JSON 映射到 Java 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41072612/

相关文章:

java - 使用哪种 Javax.awt 布局?

java - 从请求中获取对象的属性

.net - JSON 和 SOAP WCF 服务?

android - 自定义对象的 ArrayList 不使用 GSON 保存到 SharedPreferences

java - 在java中解析JSON : Malformed JSON: Unexpected 'C'

Java JFuzzyLogic sourceforge 运行演示

java - 没有换行字符的 JSON Java

json - 将json行数据分成多列 Pandas 数据框

java - JSON 解析器从大型 JSON 文件中逐个读取条目

java - 在转换为 JSON 时忽略 java bean 字段,仅当它的值尚未设置时