Не удается прочитать атрибут из элемента JSON - PullRequest
0 голосов
/ 28 января 2019

Я пытаюсь получить значение из атрибута в полезной нагрузке, но каратэ выдает ошибку или просто не получает значение.

Я создал упрощенную версию своего кода, чтобы сделать еголегче понять.

* def lists = [{@id: 1, type: 'video'}, {@id: 2, type: 'image'}]
* def ser = {@id: 2, type: '#string'}

* def foundAt = []
* def fun = function(x, i){ if (karate.match(x, ser).pass) foundAt.add(i) }
* eval karate.forEach(lists, fun)
* def storeId = lists[foundAt[0]].@id
* def storeType = lists[foundAt[0]].type
* print storeId
* print storeType

print storeType напечатает значение, как ожидается, но print storeId выведет следующее сообщение об ошибке:

javascript evaluation failed: lists[foundAt[0]].@id, <eval>:1:18 Expected ident but found error
lists[foundAt[0]].@id
                  ^ in <eval> at line number 1 at column nu*mber 18

Я ожидаю, что будет напечатано значение '2', но ясно, что я делаю что-то не так?

1 Ответ

0 голосов
/ 28 января 2019

Одно небольшое изменение поможет, поскольку @ является «плохим» символом для имен ключей JSON:

* def storeId = lists[foundAt[0]]['@id']

Вот также предлагаемое упрощение вашего кода:

* def fun = function(x, i){ return karate.match(x, ser).pass }
* def found = karate.filter(lists, fun)
* def storeId = found[0]['@id']
* def storeType = found[0].type
* print storeId
* print storeType
...