Javascript 在Java中不使用POJO类解析不同的JSON响应

Javascript 在Java中不使用POJO类解析不同的JSON响应,javascript,java,json,Javascript,Java,Json,我正在用Java解析来自RESTAPI的JSON响应,但我不想为每个响应创建一个Java类(POJO)(响应具有不同的数据结构和字段)。Java中是否有一个更通用的JSON解析器类似于JavaScript的简单语法 下面的JSON只是众多REST端点之一的结果 { “f1”:“体积”, “f2”:“性别”, “f3”:“天”, “f4”:[{ “id”:“F”, “姓名”:“女性”, “价值观”:[{ “名称”:“九月”, “价值”:12 } ] }, { “id”:“M”, “姓名”:“男性”

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

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

{
“f1”:“体积”,
“f2”:“性别”,
“f3”:“天”,
“f4”:[{
“id”:“F”,
“姓名”:“女性”,
“价值观”:[{
“名称”:“九月”,
“价值”:12
}
]
}, {
“id”:“M”,
“姓名”:“男性”,
“价值观”:[{
“名称”:“九月”,
“价值”:11
}
]
}
]
}
在JavaScript中,要访问女性的值:

jsonRoot.f4[0]。值[0]。值
这比创建大量Java类更简洁。您能建议一些类似的方法或避免创建许多POJO的方法吗?

如果您使用Jquery,Jquery中有一个parseJson()函数

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


Jackson映射到
Map
也可以:

    String data = "{\"f4\":[1, 2]}"

    try {
        Map<String, Object> value = mapper.readValue(data, Map.class);
        System.out.println(value.get("f4"));
    } catch (IOException e) {
        e.printStackTrace();
    } 
String data=“{\'f4\:[1,2]}”
试一试{
Map value=mapper.readValue(数据,Map.class);
System.out.println(value.get(“f4”);
}捕获(IOE异常){
e、 printStackTrace();
} 

为此定义POJO对象的值是静态类型检查,我仍然建议这样做。

您可以使用
org.json

如果您使用maven:

    <dependency>
        <groupId>org.json</groupId>
        <artifactId>json</artifactId>
        <version>20150729</version>
    </dependency>
您还可以访问阵列

JSONArray f4Array = jsonObject.getJSONArray("f4");
然后对它进行迭代

for (int i = 0; i < f4Array.length(); i++){
        String id = f4Array.getJSONObject(i).getString("id");
        String name = f4Array.getJSONObject(i).getString("name");
        System.out.println(name);
        System.out.println(id);
        JSONArray values = f4Array.getJSONObject(i).getJSONArray("values");
        for (int j = 0; j < values.length(); j++){
            String dName = values.getJSONObject(j).getString("name");
            int dValue = values.getJSONObject(j).getInt("value");
            System.out.println(dName);
            System.out.println(dValue);
        }

    }
for(int i=0;i
如果导入com.google.gson.com的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();

是的,使用像Jackson这样的库。@duffymo根据上面的例子,你能给出一个在Jackson中如何做到这一点的例子吗?我在网上看到的示例仍然使用Java类。如果您使用ScriptEngine,那么您可以在Java中使用JavaScript(如果您愿意)。当然,可以将其解析为JSONObject。或者试试内置于JDK8本身的Nashorn JavaScript引擎。您的一些努力是值得注意的。@duffymo不能使用JDK8,我们的环境暂时限制为7。我将研究Nashorn,如果它可以插入到7。我使用的是Java,不是JavaScriptOops,我错了。我一直在使用javascript,但忘了还有java。
     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();