Robot Framework - TypeError: строковые индексы должны быть целыми числами при разборе Json - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь проанализировать массив json, но получаю следующую ошибку

TypeError: string indices must be integers

Json:

{
    'locationId': 'location1',
    'name': 'Name',
    'type': 'Ward',
    'patientId': None,
    'children': [{
        'locationId': 'location2',
        'name': 'Name',
        'type': 'Bed',
        'patientId': None,
        'children': [{
            'locationId': 'location3',
            'name': 'Name',
            'type': 'HospitalGroup',
            'patientId': None,
            'children': None
        }]
    }, {
        'locationId': 'location4',
        'name': 'Name',
        'type': 'Hospital',
        'patientId': None,
        'children': None
    }, {
        'locationId': 'location5',
        'name': 'Name',
        'type': 'Bed',
        'patientId': None,
        'children': None
    }, {
        'locationId': 'location6',
        'name': 'Name',
        'type': 'Bed',
        'patientId': None,
        'children': None
    }, {
        'locationId': 'location27',
        'name': 'Name',
        'type': 'Bed',
        'patientId': None,
        'children': None
    }]
}

Я пытаюсь получить все значения locationIdи сохраняйте значения одно за другим в списке.

Вот что я делаю

    @{locationIds}=  create list
    :FOR  ${item}  IN   @{Location_Json}
    \  ${locationId}=  set variable  ${item['locationId']}
    \  log  ${locationId}
    \  append to list  ${locationIds}  '${locationId}'

Я также пробовал это

    @{locationIds}=  create list
    :FOR  ${item}  IN   @{Location_Json}
    \  ${locationId}=  set variable  ${item['children'][0]['locationId']}
    \  log  ${locationId}
    \  append to list  ${locationIds}  '${locationId}'

Но я получаюта же ошибка.

В этой строке тест не пройден ${locationId}= set variable ${item['locationId']}

Любая помощь будет признательна.

1 Ответ

0 голосов
/ 20 ноября 2018

Если содержимое переменной var ${Location_Json} действительно является образцом json, который вы поместили выше, это объясняет исключение "строковые индексы должны быть целыми числами".

json, с которым вы работаете, являетсясловарь (не список);таким образом, в этом цикле:

:FOR  ${item}  IN   @{Location_Json}

значение ${item} будет ключом в словаре - например, locationId, name и т. д. из словаря верхнего уровня.

Если вас интересует "locationId" поддикта "children", то это будет сделано - итерация по элементам "children":

: FOR $ {item} IN @{Location_Json ['children']}

На каждой итерации ${item} будет одним из поддиктов в "children", и вы можете получить его "locationId"

\    ${locationId}=  set variable  ${item['locationId']}

Не имеет отношения к вашей проблеме, пожалуйста, не делайте этого:

append to list  ${locationIds}  '${locationId}'

Не помещайте значение ${locationId} в одинарные кавычки - что произойдет, если эти кавычки теперь будутбыть частью списка.
Скажем, значение ${locationId} равно

location5

с этими кавычками, оно будет иметь вид

'location5'

Iне думай, что это твоя цель;с этими дополнительными кавычками это потерпит неудачу:

Should Be Equal As Strings    location5      ${locationIds[3]}   # because locationIds[3] will have the extra quotes
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...