如何获取JSON属性并将其存储在JAVA中的数组中?

时间:2019-09-27 20:23:30

标签: java arrays json rest-assured rest-assured-jsonpath

我试图在RestAssured TestNG测试中断言,对于JSON文件中的每个给定ReportCodeNbr,都有正确的UID值。

我能够通过像本示例中那样使用硬编码的索引值引用每个json节来成功完成此操作,但是,这些节的顺序可以更改,从而改变了索引值并破坏了测试。

如何最好地存储每个节的ReportCodeNbr的所有值,然后断言UID是正确的,而不像我的示例中那样使用硬编码的索引值?

一位同事建议了一个数组,但是我不确定该怎么做。

具有两个数据对象的部分JSON文件:

[
    {
        "Url": null,
        "DataSteward": null,
        "ReportAuthor": null,
        "ReportKey": "100PercentSponsorFundedFaculty",
        "SystemType": null,
        "ReportTitle": "Report",
        "ReportCodeNbr": "FIN1065",
        "PropertyList": null,
        "Title": "100 Percent Sponsor-Funded Faculty",
        "Uid": "97d17dbd-9c3b-46aa-ae0e-39603a32250f"
    },
    {
        "Url": null,
        "DataSteward": null,
        "ReportAuthor": null,
        "ReportKey": "2013BaseYearPaidFTEReport",
        "SystemType": null,
        "ReportTitle": "Report",
        "ReportCodeNbr": "FIN1075",
        "PropertyList": null,
        "Title": "100 Percent Sponsor-Funded Faculty",
        "Uid": "97b3f1e0-b17d-448b-86ae-6ed6b432dcd2"
    }
]

使用硬编码索引值的成功测试:

@Test
    public static void firstTest() {
       Response response = given().when().get(baseURI);
       response.then()
               .assertThat().body("ReportCodeNbr[1]", equalTo("FIN1075"))
               .assertThat().body("Uid[1]", equalTo("97b3f1e0-b17d-448b-86ae-6ed6b432dcd2"));}

1 个答案:

答案 0 :(得分:1)

类似的东西应该可以工作:

Response response = given().when().get(baseURI);    
List<String> jsonResponse = response.jsonPath().getList("Uid");

然后,如果使用> = java 1.8,则可以流式处理列表并断言它包含要查找的值。 否则,只需使用for循环。

有很多方法可以做到这一点。 请参阅此处以获取更多信息: FirebaseOptionsTesting Excellence