2017-03-06 22 views
0

我有這個JSON對象,我喜歡更新對象內的值。我發現了一種方法,我應該如何在stackoverflow(Json handling in ROBOT)上做到這一點,它的失敗,我不明白爲什麼。Robotframework - 更新json字典中的值給出錯誤AttributeError:'list'對象沒有屬性'更新'

這是德對象:

{"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"]}]} 

在機器人幀I由該試驗中,激發了給定鏈路上。

${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}我試圖值= shizzleliz,值[0] = shizzleliz,值[1] = shizzleliz,P690-C1-C2-C1-C1-C1-F0 = shizzleliz

所有給出的錯誤:AttributeError: 'list' object has no attribute 'update'

當我更改$ {json [「fields」]}到$ {json}時,給定值設置爲庫,但不是在de字段部分/集合中。

有沒有人有我的錯誤線索?如果你有一個建議,我怎麼可以更新的價值,我想是非常:)

目標是改變:{"key":"P690-C1-C2-C1-C1-C1-F0","values":[]} 到:{"key":"P690-C1-C2-C1-C1-C1-F0","values":["shizzleliz"]}

+0

您試圖在列表中應用'Set To Dictionary' $ {json [「fields」 ]}'。 –

+0

感謝您的awnser,但是當我使用set list值時,比添加shizzleliz。我改變了我的問題,也許你可以幫助我在正確的方向? – Shizzleliz

回答

1

對於你的問題的第一部分 - 錯誤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}

+0

這不太對。它將該值設置爲一個字符串('「shizzeleliz」')而不是一串字符串('[「shizzeleliz」]') –

+0

它確實將它設置爲一個字符串,沒錯,錯過了這個問題;更新以創建一個列表var並設置它。 – Todor

+0

Thx對於激光器來說,結果有點不同。但你的確幫助我走向了正確的方向! – Shizzleliz