Ответ 1
Самым простым решением было бы написать ключевое слово python, которое может изменить значение для вас. Однако это можно решить с помощью ключевых слов робота, выполнив следующие действия:
- преобразовать строку JSON в словарь
- изменить словарь
- преобразовать словарь обратно в строку JSON
Преобразовать строку JSON в словарь
В Python есть модуль (json) для работы с данными JSON. Вы можете использовать ключевое слово > для преобразования строки JSON в словарь Python, используя метод load (строка загрузки) этого модуля.
Предполагая, что ваши данные JSON находятся в переменной робота с именем ${json_string}
, вы можете преобразовать их в словарь Python следующим образом:
${json}= evaluate json.loads('''${json_string}''') json
С учетом вышесказанного, ${json}
теперь содержит ссылку на словарь, который содержит все данные json.
Изменить словарь
В библиотеке Collections, которая поставляется с роботом, есть ключевое слово с именем , установленное в словарь, которое можно использовать для установки значения элемента словаря. В этом случае вам нужно изменить значение словаря, вложенного в элемент vt
объекта JSON. Мы можем ссылаться на этот вложенный словарь, используя расширенный синтаксис робота extended variable syntax.
Например:
set to dictionary ${json["vt"]} dp=the new value
С этим у ${json}
теперь есть новое значение. Однако это все еще словарь Python, а не данные JSON, так что есть еще один шаг.
Преобразовать словарь обратно в json
Преобразование словаря обратно в JSON - это обратная сторона первого шага. А именно, используйте метод dumps (строка дампа) модуля json:
${json_string}= evaluate json.dumps(${json}) json
При этом ${json_string}
будет содержать допустимую строку JSON с измененными данными.
Полный пример
Ниже приведен полный рабочий пример. Строка json будет напечатана до и после замены нового значения:
*** Settings ***
Library Collections
*** Test Cases ***
Example
${json_string}= catenate
... {
... "p": "10",
... "v": 100,
... "vt": {
... "dp": "Field to be edited"
... }
... }
log to console \nOriginal JSON:\n${json_string}
${json}= evaluate json.loads('''${json_string}''') json
set to dictionary ${json["vt"]} dp=the new value
${json_string}= evaluate json.dumps(${json}) json
log to console \nNew JSON string:\n${json_string}