REST ASSURED(JAVA):提取给定的json对象值';父对象值
假设我有以下json:REST ASSURED(JAVA):提取给定的json对象值';父对象值,java,json,rest-assured,rest-assured-jsonpath,Java,Json,Rest Assured,Rest Assured Jsonpath,假设我有以下json: { "page": 2, "per_page": 3, "total": 12, "total_pages": 4, "data": [ { "id": 4, "first_name": "Eve", "last_name": "Holt", "avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/marcoramires/128.jpg" }, {
{
"page": 2,
"per_page": 3,
"total": 12,
"total_pages": 4,
"data": [
{
"id": 4,
"first_name": "Eve",
"last_name": "Holt",
"avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/marcoramires/128.jpg"
},
{
"id": 5,
"first_name": "Charles",
"last_name": "Morris",
"avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/stephenmoon/128.jpg"
},
{
"id": 6,
"first_name": "Tracey",
"last_name": "Ramos",
"avatar": "https://s3.amazonaws.com/uifaces/faces/twitter/bigmancho/128.jpg"
}]}
我只想提取属于id=6的“first_name”的值
我可以用其他方法来克服这个问题,但我想知道是否有一条解决问题的捷径
到目前为止,我已经试过了:
data.find{it.id='6'}。名字 可能吗?如果是真的,怎么做?
谢谢 我不确定这个解决方案是否是您想要的,但您肯定可以根据id提取名字 在
放心
中使用JsonPath
库。您可以将JSON作为字符串JsonPath.from(“JSON字符串”)
传递,也可以从Response
获取,如下所示:
JsonPath path = response.jsonPath();
List<HashMap<String, Object>> data = path.getList("data");
for (HashMap<String, Object> singleObject : data) {
if (singleObject.get("id").equals(6)) {
System.out.println(singleObject.get("first_name"));
}
}
private static String getFirstNameById(JsonPath path, int id) {
List<HashMap<String, Object>> data = path.getList("data");
for (HashMap<String, Object> singleObject : data) {
if (singleObject.get("id").equals(id)) {
return (String) singleObject.get("first_name");
}
}
throw new NoSuchElementException(String.format("Can't find first_name with id: %d", id));
}
List<HashMap<String, Object>> data = JsonPath.from(json).getList("data");
Optional<String> firstName = data.stream().filter(x -> x.get("id").equals(6)).map(x -> (String) x.get("first_name")).findFirst();
if (firstName.isPresent()) {
System.out.println(firstName.get());
}
然后,您可以获取数据
数组并按如下方式迭代其元素:
JsonPath path = response.jsonPath();
List<HashMap<String, Object>> data = path.getList("data");
for (HashMap<String, Object> singleObject : data) {
if (singleObject.get("id").equals(6)) {
System.out.println(singleObject.get("first_name"));
}
}
private static String getFirstNameById(JsonPath path, int id) {
List<HashMap<String, Object>> data = path.getList("data");
for (HashMap<String, Object> singleObject : data) {
if (singleObject.get("id").equals(id)) {
return (String) singleObject.get("first_name");
}
}
throw new NoSuchElementException(String.format("Can't find first_name with id: %d", id));
}
List<HashMap<String, Object>> data = JsonPath.from(json).getList("data");
Optional<String> firstName = data.stream().filter(x -> x.get("id").equals(6)).map(x -> (String) x.get("first_name")).findFirst();
if (firstName.isPresent()) {
System.out.println(firstName.get());
}
使用下面的JsonPath,它将根据id为您提供第一个名称:
[?(@.id ==4)].first_name
如果可能的话。你有没有自己尝试过这样做?当然。没有成功。我可以用其他方法来解决这个问题,但我想知道是否有一种直接的方法可以重新启动。请显示您已经尝试过的内容。data.find{it.id='6'}。首先请用这些信息编辑您的问题。展示你的作品和提出完整的独立问题是SO礼仪的一部分。请不要把我的评论看作是试图帮助你改进你的问题。