在不使用Java中的POJO类的情况下解析不同的JSON响应

men*_*h84 5 javascript java json

我在Java中解析来自REST API的JSON响应,但我不想为每个响应创建一个Java类(POJO)(响应具有不同的数据结构和字段).Java中是否有一个更通用的JSON解析器,类似于JavaScript的直接语法?

下面的JSON只是众多REST端点中的一个的结果

{
    "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
                }
            ]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

在JavaScript中,要访问女性的值:

jsonRoot.f4[0].values[0].value
Run Code Online (Sandbox Code Playgroud)

这比创建大量Java类更整洁.您能否提出类似的建议或避免创建许多POJO的方法?

小智 5

如果您导入了com.google.gson的jar.您可以获得如下值:

     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();
Run Code Online (Sandbox Code Playgroud)