[英]RobotFramework : AttributeError: 'list' object has no attribute 'startswith'
[英]Robotframework - updating value in json dictionary gives error AttributeError: 'list' object has no attribute 'update'
我有這個 JSON 對象,我喜歡更新對象中的值。 我找到了一種方法,我應該如何在 stackoverflow( 機器人中的 Json 處理)上做到這一點,但它失敗了,我不明白為什么。
這是 de 對象:
{"elementKey":"P690-C0-C3-B1","fields":[{"key":"P690-C1-C2-C1-C1-C1-F0","values":[]},{"key":"P690-C0-C2-F8","values":["1200"]},{"key":"P690-C0-C2-F9","values":["22000"]},{"key":"P690-C0-C2-F11","values":["I"]},{"key":"P690-C0-C2-F10","values":["2200"]},{"key":"P690-C0-C2-C0-C0-F0","values":["98-zsg-2"]},{"key":"P690-C1-C0-C0-F1","values":["Personenauto"]},{"key":"P690-C1-C0-C0-F2","values":["Personenauto KVP"]},{"key":"P690-C0-C2-F6","values":["B"]},{"key":"P690-C0-C2-F7","values":["75"]},{"key":"P690-C0-C2-F4","values":["2"]},{"key":"P690-C0-C2-F5","values":["5"]},{"key":"P690-C0-C2-F2","values":["model"]},{"key":"P690-C0-C2-F3","values":["2017"]},{"key":"P690-C1-C2-C2-C2-C1-F0","values":[]},{"key":"P690-C0-C2-F1","values":["merk"]}]}
在 Robot 框架中,我根據給定的鏈接進行了此測試。
${json_string}= Set Variable "see text above"
${json}= Evaluate json.loads('''${json_string}''') json
Set To Dictionary ${json["fields"]} ${new_value}
${json_string}= evaluate json.dumps(${json}) json
用 ${new_value} 我試過 value=shizzleliz, value[0]=shizzleliz, value[1]=shizzleliz, P690-C1-C2-C1-C1-C1-F0=shizzleliz
都給出錯誤: AttributeError: 'list' object has no attribute 'update'
當我將 ${json["fields"]} 更改為 ${json} 時,給定值設置為庫,但不在字段部分/集合中。
有沒有人知道我做錯了什么? 如果您有關於如何更新值的建議,我非常希望 :)
目標是將: {"key":"P690-C1-C2-C1-C1-C1-F0","values":[]}
更改為: {"key":"P690-C1-C2-C1-C1-C1-F0","values":["shizzleliz"]}
對於您問題的第一部分 - 錯誤AttributeError: 'list' object has no attribute 'update'
,您已經看到了評論 - 您正在對無法通過的列表對象調用Set To Dictionary
。
對於第二部分,為了在鍵等於某個值時設置該值,您必須遍歷所有列表成員,並根據鍵上的條件進行設置:
${json_string}= Set Variable see text above
${json1}= Evaluate json.loads('''${json_string}''') json
${target value}= Create List shizzleiz
:FOR ${element} IN @{json1["fields"]}
\ Run Keyword If "${element['key']}" == "P690-C1-C2-C1-C1-C1-F0"
... Set To Dictionary ${element} values=${target value}
${json_string}= evaluate json.dumps(${json1}) json
在RF中看起來有點麻煩(相比python); 一句話 - 將局部變量命名為與模塊相同的名稱從來都不是一個好主意 - 因此我將其重命名為${json1}
我使用Catenate
找到了一個更簡單的解決方案,我需要在 json 正文中隨機化兩個值。
${shizzleiz}= shizzleiz # or whatever you want to appear there
${json_string}= Catenate {"elementKey":"P690-C0-C3-B1","fields":[{"key":"P690-C1-C2-C1-C1-C1-F0","values":[]},{"key":"P690-C0-C2-F8","values":["1200"]},{"key":"P690-C0-C2-F9","values":["22000"]},{"key":"P690-C0-C2-F11","values":["I"]},{"key":"P690-C0-C2-F10","values":["2200"]},{"key":"P690-C0-C2-C0-C0-F0","values":["98-zsg-2"]},{"key":"P690-C1-C0-C0-F1","values":["Personenauto"]},{"key":"P690-C1-C0-C0-F2","values":["Personenauto KVP"]},{"key":"P690-C0-C2-F6","values":["B"]},{"key":"P690-C0-C2-F7","values":["75"]},{"key":"P690-C0-C2-F4","values":["2"]},{"key":"P690-C0-C2-F5","values":["5"]},{"key":"P690-C0-C2-F2","values":["model"]},{"key":"P690-C0-C2-F3","values":["2017"]},{"key":"P690-C1-C2-C2-C2-C1-F0","values": ${shizzleiz} ${the-rest-of-the-long-json-as-a-string}
然后繼續:
${json}= Evaluate json.loads('''${json_string}''') json
${json_string}= evaluate json.dumps(${json}) json
(基本上在對 json 函數做出反應之前先完成工作 - 顯然這需要事先知道值,並且還可以使用更多變量。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.