从JsonPath中提取动态密钥

时间:2013-07-08 15:31:15

标签: java json

{
"random": {
   "5756cd7a-4662-4428-9b09-dbff3080450a": {
       "@class": "one",
       "id": "5756cd7a-4662-4428-9b09-dbff3080450a"
   },
   "857ef5ee-af98-4f24-89fe-29bdbebde882": {
       "@class": "two",
       "id": "857ef5ee-af98-4f24-89fe-29bdbebde882"
   }
 }
}

这是我的api'响应',它是JsonPath类型。

String random = response.getString("random");

关于如何提取第一个随机元素,我在此之后陷入困境。

2 个答案:

答案 0 :(得分:0)

通过查看文档,您可以使用JsonPath#getMap进行提取,例如:

final Map<String, RandomObject> result = response.getMap("random", String.class, RandomObject.class);

RandomObject的位置如下:

public class RandomObject {
    private String klass; // N.B. Not sure how to deal with @class naming
    private String id;

    // ... constructor/setters/getters etc...
}

虽然,我对这个JsonPath库不太熟悉,所以它可能不那么容易。

答案 1 :(得分:0)

假设您在响应JsonString中将您的json响应作为字符串,下面的代码可以解决您的问题。

    List<String> randomIDS = JsonPath.read(responseJsonString, "$.random..id");
    Collections.reverse(randomIDS);

    for (String randomID : randomIDS) {
        StringBuilder stringBuilder = new StringBuilder("$.random.");
        String randomClass = JsonPath.read(
                responseJsonString, 
                stringBuilder.append(randomID).append(".@class").toString());
        System.out.println(randomClass);
    }