JSON路径与预期的不匹配:(a collection containing〈[“excpetedValue”]>)实际值:〈[excpetedValue]>

8yparm6h  于 2023-04-08  发布在  其他
关注(0)|答案(1)|浏览(122)

我有一些JSON文件,预期结果保存在一个JSON文件中,我从中创建JSONObj:

JSONObject jsonObject = new JSONObject(myJson);

然后我使用我的变量来获得正确的JSON(我有不同的用户,在这里显示为变量)

JSONObject jsonObjData = jsonObject.getJSONObject(variable1).getJSONObject(variable2);

然后我有一些真实的响应,我试图将其与预期的JSON(数组)进行比较(只是其中的一部分)。
到目前为止的代码:

ValidatableResponse respBody = response.then();
JSONArray expectedListArr = jsonObjData .getJSONArray(dtEntry);
respBody.body("myPath", hasItems(expectedListArr));
}

我用 cucumber ,所以它看起来像这样:

And Values for key "myPath" equals the following
  | myVariable2 |

和步骤

@Then("Values for key {string} equals the following")
    public void valuesForListContains(String pathKey, DataTable dt) {
        ValidatableResponse respBody = response.then();
        if (dt.values().stream().anyMatch(a->a.contains("myVariables "))) {
            String dtEntry = dt.toString().replaceAll("\\|","").trim();
            JSONArray expectedListArr = jsonObjData.getJSONArray(dtEntry);
            respBody.body("myPath", hasItems(expectedListArr));
        }

我不知道我是不是在绕圈子,但上面的话告诉我:

**1个预期失败。JSON路径deliveryCountries不匹配。预期:(a collection containing〈[“excpetedValue”]〉)实际值:〈[excpetedValue]〉

我的json:

{
"myVariable4": [
        {
          "key1": val,
          etc.
        }
      ],
      "myVariable2": [
        "expectedValue"
      ],
      "myVariable3": [
        "val1",
        "val2",
        "val3",
        "val4",
etc.
      ],}
xesrikrc

xesrikrc1#

对不起,我不明白你的问题!
如果你有一个这样的JSON:

{
"myVariable4": [
        {
          "key1": val,
          etc.
        }
      ],
      "myVariable2": [
        "expectedValue"
      ],
      "myVariable3": [
        "val1",
        "val2",
        "val3",
        "val4",
etc.
      ],}

所以首先du必须得到JSONArray:

JSONArray myvaribl4 = jsonObject.getJSONArray("myVariable4");

之后,你可以再次获得对象:

for(int i =0; i<myvaribl4.length; i++){
   JSONObject jobj = myvaribl4.getJSONObject(i);
}

如果数组只有一个Object:

JSONObject jobj = myvaribl4.getJSONObject(0);

然后你得到key 1的值:

String value = jobj.getString("key1");

我希望我正确地理解了你的问题。

相关问题