Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Parse different JSON responses without using POJO classes in Java

I am parsing JSON responses from REST API in Java, but I don't want to create a Java class (POJO) for each response (responses have different data structures and fields). Is there a more generic JSON parser in Java that is similar to the straightforward syntax of JavaScript?

The JSON below is the result of just one of the many REST endpoints

{
    "f1" : "volume",
    "f2" : "gender",
    "f3" : "days",
    "f4" : [{
            "id" : "F",
            "name" : "female",
            "values" : [{
                    "name" : "September",
                    "value" : 12
                }
            ]
        }, {
            "id" : "M",
            "name" : "male",
            "values" : [{
                    "name" : "September",
                    "value" : 11
                }
            ]
        }
    ]
}

In JavaScript, to access the value for female:

jsonRoot.f4[0].values[0].value

which is neater than to have to create numerous Java classes. Can you suggest something similar or a way to avoid creating many POJOs?

like image 451
oikonomiyaki Avatar asked Nov 16 '15 03:11

oikonomiyaki


2 Answers

If you imported the jar of com.google.gson.You can get the value like this:

     String str="{" +
            "    \"f1\" : \"volume\"," +
            "    \"f2\" : \"gender\"," +
            "    \"f3\" : \"days\"," +
            "    \"f4\" : [{" +
            "            \"id\" : \"F\"," +
            "            \"name\" : \"female\"," +
            "            \"values\" : [{" +
            "                    \"name\" : \"September\"," +
            "                    \"value\" : 12" +
            "                }" +
            "            ]" +
            "        }, {" +
            "            \"id\" : \"M\"," +
            "            \"name\" : \"male\"," +
            "            \"values\" : [{" +
            "                    \"name\" : \"September\"," +
            "                    \"value\" : 11" +
            "                }" +
            "            ]" +
            "        }" +
            "    ]" +
            "}";
    JsonParser parser=new JsonParser();
    JsonObject object=(JsonObject)parser.parse(str);
    String value=object.get("f4").getAsJsonArray().get(0).getAsJsonObject()
            .get("values").getAsJsonArray().get(0).getAsJsonObject()
            .get("value").getAsString();
like image 134
Ayano Avatar answered Oct 07 '22 12:10

Ayano


    String s="[0,{\"1\":{\"2\":{\"3\":{\"4\":[5,{\"6\":7}]}}}}]";
    Object obj=JSONValue.parse(s);
    JSONArray array=(JSONArray)obj;
    System.out.println(array.get(1));       
    System.out.println(((JSONObject)array.get(1)).get("1"));

more example

json-simple.jar

like image 41
Kerwin Avatar answered Oct 07 '22 11:10

Kerwin