我有这样的API响应:
"Name": [
{
"abc": "xyz",
"abc1": "xyz2"
},
{
"abc": "yzk",
"abc1": "xyz21"
},
{
"abc": "zxc",
"abc1": "xyz211"
}
]
我想使用Java验证NAME属性是否包含所有提到的键值对
有人可以解释吗?
答案 0 :(得分:0)
这不是一个黄瓜问题。而是有关如何将某些json
转换为可以验证正确的内容的问题。
我可以看到三个或四个不同的方法,它们都包含一个外部库,用于解析json
并将其转换为可以使用常规断言框架进行断言的Java对象。
首先询问您的开发人员他们使用什么库来处理json
。如果您的项目没有处理json
的首选方法,则可以向
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20180813</version>
</dependency>
并将其用于将json
字符串解析为可以验证的对象。
可能值得注意的是您的示例无效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}";
}
}
您的任务是获取数组,检查数组中的每个元素,然后查看其中是否包含所需的内容。