Получение значения элемента из jsonpath, корнем которого является массив

У меня есть ответ JSON с корнем в виде массива из 1 или более объектов. Я хочу извлечь значение одного из элементов внутри каждого объекта.

Вот пример JSON:

[  
   {  
      "od_pair":"7015400:8727100",
      "buckets":[  
         {  
            "bucket":"C00",
            "original":2,
            "available":2
         },
         {  
            "bucket":"A01",
            "original":76,
            "available":0
         },
         {  
            "bucket":"B01",
            "original":672,
            "available":480
         }
      ]
   },
   {  
      "od_pair":"7015400:8814001",
      "buckets":[  
         {  
            "bucket":"C00",
            "original":2,
            "available":2
         },
         {  
            "bucket":"A01",
            "original":40,
            "available":40
         },
         {  
            "bucket":"B01",
            "original":672,
            "available":672
         },
         {  
            "bucket":"B03",
            "original":632,
            "available":632
         },
         {  
            "bucket":"B05",
            "original":558,
            "available":558
         }
      ]
   }
]

Я хочу получить доступ к значениям od_pair в каждом объекте.

Я пытался ссылаться на корневой массив как $, но это не помогло.

Это фрагмент кода, который я написал:

        List<Object> LegList = jsonPath.getList("$");
        int NoofLegs = LegList.size();
        System.out.println("No of legs :" +NoofLegs);
        for (int j=0; j<=NoofLegs;j++) {
            String OD_Pair = jsonPath.param("j", j).getString("[j].od_pair");
            System.out.println("OD Pair: " + OD_Pair);
            List<Object> BucketsList = jsonPath.param("j", j).getList("[j].buckets");

            int NoOfBuckets = BucketsList.size();
            System.out.println("no of Buckets: " + NoOfBuckets);
        }

Это ошибка, которую я вижу:

Caused by: 
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup 
failed:
Script1.groovy: 1: unexpected token: [ @ line 1, column 27.
restAssuredJsonRootObject.[j].od_pair

Может ли кто-нибудь помочь мне здесь, пожалуйста?

Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
1
0
1 924
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы были правы, начав с $. Однако с вашим конкретным JSON вы получаете List из HashMap<String, Object>, где каждый объект JSON представлен как один HashMap. Зная, что вы можете получить список HashMap следующим образом:

List<HashMap<String, Object>> jsonObjectsInArray = path.getList("$");

String будет названием атрибута. Object будет String, Integer, JSONObject или JSONArray. Последнее не является точным именем класса, но оно не имеет отношения к вам для достижения желаемых результатов.

Теперь все, что нам нужно сделать, это перебрать HashMap и извлечь значения od_pair следующим образом:

for (HashMap<String, Object> jsonObject : jsonObjectsInArray) {
    System.out.println(jsonObject.get("od_pair"));
}

Результат:

7015400:8727100
7015400:8814001

Надеюсь, поможет!

Спасибо за это. Однако у меня также есть вложенный массив сегментов, и что мне нужно сделать, чтобы получить доступ к элементам сегмента? Позвольте мне также вставить другие биты кода, чтобы они были более понятными. Мое требование для каждой od_pairs, мне нужно захватить каждый код корзины и их доступное количество:

Mihir 30.07.2019 14:50

@Mihir Можете ли вы создать еще один вопрос с данным требованием? Это было бы намного понятнее для будущих читателей.

Fenio 30.07.2019 14:54

Спасибо за это. Однако у меня также есть вложенный массив сегментов, и что мне нужно сделать, чтобы получить доступ к элементам сегмента? Позвольте мне также вставить другие биты кода, чтобы они были более понятными. Мое требование для каждой od_pairs, мне нужно захватить каждый код корзины и их доступное количество. Я вставлю весь код здесь в новом комментарии для вашей справки. Если бы вы могли направить меня на это, пожалуйста?

Mihir 30.07.2019 14:56

@Mihir Я могу, но я бы предложил задать новый вопрос.

Fenio 30.07.2019 14:57
stackoverflow.com/questions/57272470/… @Fenio: Создал новый вопрос.
Mihir 30.07.2019 15:07

@Михир Спасибо. Я посмотрю, смогу ли я тебе помочь

Fenio 30.07.2019 15:07

Другие вопросы по теме