У меня есть ответ 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
Может ли кто-нибудь помочь мне здесь, пожалуйста?
Вы были правы, начав с $
. Однако с вашим конкретным 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
Надеюсь, поможет!
@Mihir Можете ли вы создать еще один вопрос с данным требованием? Это было бы намного понятнее для будущих читателей.
Спасибо за это. Однако у меня также есть вложенный массив сегментов, и что мне нужно сделать, чтобы получить доступ к элементам сегмента? Позвольте мне также вставить другие биты кода, чтобы они были более понятными. Мое требование для каждой od_pairs, мне нужно захватить каждый код корзины и их доступное количество. Я вставлю весь код здесь в новом комментарии для вашей справки. Если бы вы могли направить меня на это, пожалуйста?
@Mihir Я могу, но я бы предложил задать новый вопрос.
@Михир Спасибо. Я посмотрю, смогу ли я тебе помочь
Спасибо за это. Однако у меня также есть вложенный массив сегментов, и что мне нужно сделать, чтобы получить доступ к элементам сегмента? Позвольте мне также вставить другие биты кода, чтобы они были более понятными. Мое требование для каждой od_pairs, мне нужно захватить каждый код корзины и их доступное количество: