Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
REST ASSURED(JAVA):提取给定的json对象值';父对象值_Java_Json_Rest Assured_Rest Assured Jsonpath - Fatal编程技术网

REST ASSURED(JAVA):提取给定的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" }, {

假设我有以下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"
},
{
    "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礼仪的一部分。请不要把我的评论看作是试图帮助你改进你的问题。