Это RF код делает то, что вам нужно но ТОЛЬКО для предоставленной json-структуры. С моей точки зрения, вы должны сыграть с Get Json Value
и подготовить ключевые слова, которые вам нужны. Кстати, очевидно, что такая обработка json/string в RF немного сложна, поэтому я бы предпочел написать небольшую библиотеку Python с ключевыми словами, которые вам нужны.
*** Settings ***
Library Collections
Library HttpLibrary.HTTP
*** Variables ***
${json} {"items":[{"name":"item1","status":{"id":1,"name":"opened"}},{"name":"item2","status":{"id":2,"name":"closed"}}]}
${name} ${EMPTY}
${result} ${EMPTY}
*** Test Cases ***
Get Closed Item
${name} Get Name By Status ${json} closed
Should Be Equal As Strings ${name} item2
${name} Get Name By Status ${json} opened
Should Be Equal As Strings ${name} item1
*** Keywords ***
Get Name By Status
[Arguments] ${json} ${status}
[Return] ${result}
${json} Parse Json ${json}
:FOR ${item} IN @{json["items"]}
\ ${item} Stringify Json ${item}
\ ${name} Get Json Value ${item} /name
\ ${name} Parse Json ${name}
\ ${status_name} Get Json Value ${item} /status/name
\ ${status_name} Parse Json ${status_name}
\ ${result} Set Variable If '${status_name}' == '${status}' ${name} ${result}
Редактировать: на основе нижеследующего комментария я хотел бы получить такой код на основе python.
JsonpathLibrary.py
:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import json
import jsonpath
class JsonpathLibrary(object):
def get_items_by_path(self, json_string, json_path):
json_object = json.loads(json_string)
match_object = jsonpath.jsonpath(json_object, json_path)
match_string = json.dumps(match_object[0])
return match_string
РФ Код:
*** Settings ***
Library JsonpathLibrary.py
*** Variables ***
${json} {"items":[{"name":"item1","status":{"id":1,"name":"opened"}},{"name":"item2","status":{"id":2,"name":"closed"}}]}
${json_path} $.items[?(@.status.name=="closed")].name
*** Test Cases ***
Some Descriptive Name Here
${name} Get Items By Path ${json} ${json_path}
Should Be Equal As Strings ${name} "item2"
что '$ .items'? Он не похож на переменную робота. –
есть. это не. он является частью запроса jsonpath, указывающего на массив элементов в корне json – bp3
, пожалуйста, покажите пример теста робота, который вы создаете, и используя один из этих объектов. –