{
"data": [
{
"name": "John",
"mobile_phone": false,
"carrier": "none"
},
{
"name": "Jim",
"mobile_phone": true,
"carrier": "T-Mobile"
}
],
"result": 0
}
こんにちは、各値に対して一種の「サブ」リストを作成する方法で、Robot FrameworkでそのようなJSON応答を解析することは可能ですか? JohnをJimから分離して、たとえばJimのキャリアに関する情報のみを取得したいと思います(後でテストする別のgetリクエストを介して)。よろしくお願いします!
ソーステキスト(json)が変数_${source data}
_に格納されているとします。
_${source data}= Evaluate json.loads("""${source data}""") json
# the variable ${source data} is now a python dictionary - the same as the original json, but only - accessible as dictionary in robotframwork
${all data members}= Set Variable ${source data['data']}
${user_phone}= Create Dictionary
:FOR ${member} IN @{all data members} # iterate through the 'data', each ${member} is a dictionary in the source list
\ ${name}= Get From Dictionary ${member} name # will assign to the variable ${name} the value of the key 'name'; if there is no such key - the keyword will fail
\ Log The user ${name} has a mobile phone: ${member['mobile_phone']} # Will print "The user John has a mobile phone: False", "The user Jim has a mobile phone: True"
\ Set To Dictionary ${user_phone} ${name} ${member['mobile_phone']} # will fill-in a dictionary in the form "name": boolean_does_the_person_has_phone
_
このコメント付きのコードサンプルは、robotframeworkでjson/dictionaryオブジェクトを操作する方法を示しています。
1行目の キーワードの評価 は、任意のpythonコードを実行します(最初の引数、jsonモジュールのloads()
メソッドを呼び出します));その2番目引数は、インポートする必要がある追加のライブラリです-私たちの場合はjsonのようです。
4行目の_Set Variable
_は 拡張変数構文 を示しています。この場合、_source data
_が辞書であることを認識し、そのキーの値を取得しています。この行の実行の最後で、変数_all data members
_は、jsonの「データ」キー内にあるリストです。
8行目は、同じリストで a loop を開始します。変数member
は、反復ごとに各リストのメンバーの値を保持します。
9行目は別の(より正統的な)方法を使用して、辞書のキーの値を取得します。コレクションライブラリからキーワード Get From Dictionary を使用します。
10行目では、通常の(name
)および拡張構文(_member['mobile_phone']
_)変数を使用して、メッセージをログに記録します。
そして11行目で、name
がキーとして使用され、ブール値_member['mobile_phone']
_が値として使用されている辞書エントリが作成されます(同じ名前のキーがすでに存在する場合-上書きされます)。このキーワードも コレクションライブラリ にあります。