web-dev-qa-db-ja.com

Robot FrameworkでのJsonの解析

{
  "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リクエストを介して)。よろしくお願いします!

4
Tony Montana

ソーステキスト(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']_が値として使用されている辞書エントリが作成されます(同じ名前のキーがすでに存在する場合-上書きされます)。このキーワードも コレクションライブラリ にあります。

10
Todor Minakov