有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

javascript解析不同的JSON响应,而不使用Java中的POJO类

我正在用Java解析来自RESTAPI的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
                }
            ]
        }
    ]
}

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

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

这比创建大量Java类更简洁。你能提出一些类似的建议或避免创建许多POJO的方法吗


共 (5) 个答案

  1. # 1 楼答案

    Jackson映射到Map<String, Object>也可以:

        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();
        } 
    

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

  2. # 2 楼答案

    您可以使用org.json

    如果使用maven:

        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20150729</version>
        </dependency>
    

    或者下载jar:http://mvnrepository.com/artifact/org.json/json

    Java示例:

    import org.json.JSONObject;
    
    public class JSONTest {
    
        public static void main(String[] args) {
    
            JSONObject jsonObject = new JSONObject("{'f1' : 'volume', 'f2' : 'gender', 'f3' : 'days'}"); // Truncated for example purpose
    
            String f1 = jsonObject.getString("f1");
            System.out.println(f1);
        }
    }
    

    您还可以访问阵列

    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);
            }
    
        }
    
  3. # 3 楼答案

    如果你导入了com的罐子。谷歌。gson。您可以得到如下值:

         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();
    
  4. # 4 楼答案

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

  5. # 5 楼答案

        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