如何从JSON响应中使用键名读取名称值对

时间:2018-07-23 22:51:39

标签: json response rest-assured jsonresponse rest-assured-jsonpath

我正在使用com.jayway.restassured.response.Response类从API读取响应。其格式如下。有没有一种方法可以使用键名访问layout或region的值。例如-response.layout或response.regions? 我尝试使用JSONSlurper,但不适用于Response类。任何帮助将不胜感激。

JSON Response :
{
layouts:
    [
        regions:
            [
                [
                    metadata:null, 
                    endDate:null, 
                    displayName:null, 
                    roles:[], type:100, 
                    widgets:[], 
                    structure:100, 
                    repositoryId:headerRegionHomePage, 
                    name:header,
                    width:12, 
                    audiences:[], 
                    startDate:null, 
                    height:300
                ],
                [
                    structure:100, 
                    type:101, 
                    widgets:[], 
                    width:12
                ], 
                [
                    metadata:null, 
                    endDate:null, 
                    displayName:null, 
                    roles:[], 
                    type:102, 
                    widgets:[], 
                    structure:100, 
                    repositoryId:footerRegionHomePage, 
                    name:footer, 
                    width:12, 
                    audiences:[], 
                    startDate:null, 
                    height:300
                ]
            ],
        ]
    }

3 个答案:

答案 0 :(得分:0)

尝试将API响应直接转换为json数组:
JSONArray JSONResponseBody = new JSONArray(response.body().asString());
然后,您应该能够访问键以检索所需的值。

答案 1 :(得分:0)

    String RequiredvaluefromJSON = new JsonPath(RestAssured.
                    given().
                    get("URI").
                    andReturn().
                    asString()).get("Layout.regions");
            System.out.println(RequiredvaluefromJSON);

Given your API in URI, this will fetch you the regions[] from JSON. Let me know if this is of any use.

答案 2 :(得分:0)

一种优雅的方法是使用反序列化。

为响应json创建一个POJO。 您可以使用Gson / Jackson对序列类型的响应进行反序列化,或者Rest Assured还提供了内置的反序列化机制。

Response response = request.post("/");
ResponseBody body = response.getBody();

    // Deserialize the Response body into ClassType
ClassName responseBody = body.as(ClassName.class);

具有getters()从响应中提取相应的字段名称。