2017-12-01 1 views
0

Robotframeworkの場合、辞書オブジェクトにアクセスするにはcode 1code 2です。問題は、json.loadを使用してリストを返すjsonオブジェクトを変換し、jsonキーを単一の「ダブルカンマ」オブジェクトで返し、json.loadを使用しないときにUnicodeエラーが返されるということです。リスト内のディクショナリオブジェクトにアクセスする際にループをスローするとエラーが発生する: 'オブジェクトに属性がありません'キーまたはユニコード 'オブジェクトに属性がありません'キー

ここ

*** Settings *** 
Library OperatingSystem 
Library Collections 
Library HttpLibrary.HTTP 

*** Test Cases *** 
Code1 
    #get json file 
    ${json_data}= Get file detail.json 

    #get dictionaries under list 
    ${valuelist}= Get Json Value ${json_data} /alladdress/addresslist 

    # display it 
    log to console ${valuelist} 

    # loop over dictionaries under list 
    : FOR ${key} in @{valuelist.keys()} 
    \ ${value}= Get From Dictionary ${valuelist} ${key} 

    # getting AttributeError: 'unicode' object has no attribute 'keys 
    \ log to console ${key},${value} 


Code2 
    # get json file 
    ${json_data}= Get file detail.json 

    # get dictionaries under list 
    ${valuelist}= Get Json Value ${json_data} /alladdress/addresslist 

    # use below line to avoid unicode error 
    ${obj_list}= evaluate json.loads('''${valuelist}''') json 

    # display it 
    log to console ${obj_list} 
    # loop over dictionaries under list 

    : FOR ${key} in @{obj_list.keys()} 
    \ ${value}= Get From Dictionary ${obj_list} ${key} 

    # getting AttributeError: 'list' object has no attribute 'keys' 
    \ log to console ${key},${value} 

ライブラリーを定義することはJSONファイルは、キーワードGet json valueではなく、文字列を返していることが表示されます

{ 
    "class":{ 
     "id":0, 
     "name":"David" 
    }, 
    "alladdress":{ 
     "count":3, 
     "addresslist":[ 
     { 
      "houseno":1, 
      "streetno":5, 
      "streetname":"tesla", 
      "city":"ABC", 
      "state":"AA", 
      "country":"UK", 
      "zip":85555 
     }, 
     { 
      "houseno":2, 
      "streetno":6, 
      "streetname":"honda", 
      "city":"PQR", 
      "state":"BB", 
      "country":"IN", 
      "zip":5252 
     } 
     ] 
    } 
} 

答えて

0

ですオブジェクト。その呼び出しをpythonのjsonモジュールを使用するコードに置き換えると、データを解析して、必要なものを見つけることができます。ここで使用のものでありParse JSONキーワードがある

*** Test Cases *** 
Code1 
    #get json file 
    ${json_data}= Get file detail.json 

    #get dictionaries under list 
    ${data}= evaluate json.loads($json_data) json 
    ${alladdress}= get from dictionary ${data} alladdress 
    ${addresslist}= get from dictionary ${alladdress} addresslist 

    # loop over dictionaries under list 
    log to console addresses: 
    : FOR ${address} in @{addresslist} 
    \ log to console ${address} 
+0

@ブライアン。返信ありがとうございます。私は$で置き換えたが、それでも私は同じエラー(ユニコード)を得る – madhur

+0

@ madhur:私の間違い。私は私の答えを更新しました。 –

+0

私は/ alladdress/addresslistからの応答を得ようとしているので、$ {valuelist} = Json Value $ {json_data}/alladdress/addresslistを取得して解析し、$ {valuelist} 。あなたの答えでは、jsonファイル全体を使用しています。 – madhur

1

HttpLibrary図書館で:

例えば、これは、各アドレス辞書を出力します。これは、Get JSON Valueを使用してフェッチされたJSONドキュメントの文字列を辞書に変換できます。

ここでの値は、あなたが探しているノードに到達するために辞書を「歩く」必要がないということです。

*** Settings *** 
Library OperatingSystem 
Library HttpLibrary.HTTP 

*** Test Cases *** 

Fetch Address List 
    ${json_data}= Get file details.json 

    ${addressesJSONstring} Get Json Value ${json_data} /alladdress/addresslist 
    ${addresseslist}   Parse Json  ${addressesJSONstring} 

    : FOR ${addressDict} in @{addresseslist} 
    \ log ${addressDict['country']} 
+0

このコードでエラーが発生しましたテストライブラリ 'HttpLibrary.HTTP'をインポートできませんでした:ImportError:HttpLibraryという名前のモジュールがありません –

+0

'pip list'を使って検証し、' robotframework-httplibrary'がこのリストにあることを確認できますか?もしそうでなければ、 'pip install robotframework-httplibrary'を使ってインストールすると解決します。 –

関連する問題