我有这样的API响应:
"Name": [
{
"abc": "xyz",
"abc1": "xyz2"
},
{
"abc": "yzk",
"abc1": "xyz21"
},
{
"abc": "zxc",
"abc1": "xyz211"
}
]
我想验证NAME属性是否包含使用java提到的所有键值对
谁能解释一下?
这不是黄瓜问题。这是一个关于如何将一些json
转换为可以验证正确的东西的问题。
我可以看到三到四个不同的apporaches,它们都涉及一个外部库,用于解析json
并将其转换为可以使用常规断言框架断言的Java对象。
首先询问你的开发人员他们用什么库来处理json
。如果您的项目没有处理json
的首选方法,我会添加一个测试依赖项
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20180813</version>
</dependency>
并使用它将json
string解析为可以验证的对象。
值得注意的是,你的例子不是有效的json
,因为它不是以{
开头或以}
结尾
修复此问题会得到如下所示的示例:
{"Name": [
{
"abc1": "xyz2",
"abc": "xyz"
},
{
"abc1": "xyz21",
"abc": "yzk"
},
{
"abc1": "xyz211",
"abc": "zxc"
}
]}
通过这个示例,我能够实现一个如下所示的示例:
package se.thinkcode;
import org.json.JSONArray;
import org.json.JSONObject;
import org.junit.Test;
import static org.assertj.core.api.Assertions.assertThat;
public class ParseJson {
@Test
public void verifyNameArray() {
JSONObject jsonObject = new JSONObject(getSample());
JSONArray array = jsonObject.getJSONArray("Name");
assertThat(array.length()).isEqualTo(3);
}
private String getSample() {
return "{\n" +
"\"Name\": [\n" +
" {\n" +
" \"abc\": \"xyz\",\n" +
" \"abc1\": \"xyz2\" \n" +
" },\n" +
" {\n" +
" \"abc\": \"yzk\",\n" +
" \"abc1\": \"xyz21\"\n" +
" },\n" +
" {\n" +
" \"abc\": \"zxc\",\n" +
" \"abc1\": \"xyz211\"\n" +
" }\n" +
"]" +
"\n}";
}
}
您的任务是获取数组,检查数组中的每个元素,看它是否包含您需要的内容。