Анализ выходных данных JSON в Robot framework [TypeError: ожидаемая строка или буфер]

У меня есть такой вывод JSON:

{
  "output": {
    "ParentKey": {
      "key": "9b92e663a66c0cc1",
      "id": "uid=26"
    }
  }
}

Я пытаюсь получить содержимое ключа, а именно: 9b92e663a66c0cc1

Допустим, $ {output} имеет это содержимое / данные JSON ..

Это код, который я пробовал:

${values}=    Evaluate    json.loads($output)    json
${response}    Evaluate      json.loads($values['output']['ParentKey'])  json
${key}  set variable  ${response['ParentKey']['key']}
[Return]  ${key}

Я использую более старую версию робота (менее v3.2)

Однако я получаю такую ​​ошибку

Ошибка при оценке выражения 'json .loads (RF_VAR_values ​​[' output '] [' ParentKey '])': TypeError: ожидаемая строка или буфер

Как мне получить ключ, не получив вышеуказанную ошибку?

Спасибо!!!


person Uday T    schedule 23.11.2020    source источник
comment
второй json.loads & Assessment не нужен, потому что после того, как вы загрузили json в $ {valiues}, значения уже являются словарем, а не строкой .. скорее всего, вы можете удалить вторую строку и изменить ответ проверенной строки на значения   -  person rasjani    schedule 23.11.2020
comment
Я думаю, что это не сработает, «вывод» становится ключом, а все остальное содержимое файла становится единственным значением для ключа «вывод». Поэтому я думаю, что вы не можете напрямую получить доступ к значениям!   -  person Uday T    schedule 23.11.2020
comment
Ты пробовал ? ответ подчеркивает это и работает для меня по крайней мере   -  person rasjani    schedule 23.11.2020
comment
Эти данные отличаются от данных в вашем предыдущем вопросе. @rasjani прав, вам не нужно дважды звонить json.loads.   -  person Bryan Oakley    schedule 23.11.2020
comment
Это сработало, спасибо вам обоим !!   -  person Uday T    schedule 23.11.2020


Ответы (1)



*** Settings ***
*** Variables ***

${our_json}   { "output": { "ParentKey": { "key": "9b92e663a66c0cc1", "id": "uid=26" } } }


*** Test Case ***
Test JSON
  ${values}=    Evaluate    json.loads($our_json)    json
  Log To Console    ${values}
  ${key}  set variable  ${values['output']['ParentKey']['key']}
  Log To Console   OUR KEY: ${key}

выходы:

==============================================================================
Test
==============================================================================
Test JSON                                                             .{'output': {'ParentKey': {'key': '9b92e663a66c0cc1', 'id': 'uid=26'}}}
..OUR KEY: 9b92e663a66c0cc1
Test JSON                                                             | PASS |
------------------------------------------------------------------------------
Test                                                                  | PASS |
1 critical test, 1 passed, 0 failed
1 test total, 1 passed, 0 failed
==============================================================================
person rasjani    schedule 23.11.2020