0

I have these type of JSON object which I'm getting from gridx filter expression:

{
  "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?

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. Do I need to use my custom TypeAdapter?

1 Answer 1

1

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. Here is maven repository.

Note: to read using GSON library add '[' at starting and ']' at ending.

I have read the JSON file and store the data in 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);
    }
}
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.