在json字典中更新Robotframework值时出现错误AttributeError:“list”对象没有属性“update”

2024-07-01 07:16:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个JSON对象,我想更新对象中的值。我找到了一种方法来处理stackoverflow(Json handling in ROBOT)和它的失败,我不明白为什么。在

这是目标:

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

在机器人框架中,我做了这个测试,灵感来自于给定的链接。在

^{pr2}$

使用${new_value}我尝试了value=shizzelliz,value[0]=shizzleliz,value[1]=shizzleliz,P690-C1-C2-C1-C1-C1-F0=shizzlliz

全部给出错误:AttributeError: 'list' object has no attribute 'update'

当我将${json[“fields”]}更改为${json}时,give值被设置为库,而不是de fields部分/集合中。在

有人知道我做错了什么吗?如果您对我如何更新值有什么建议,我非常希望:)

目标是更改:{"key":"P690-C1-C2-C1-C1-C1-F0","values":[]} 收件人:{"key":"P690-C1-C2-C1-C1-C1-F0","values":["shizzleliz"]}


Tags: 对象key目标fieldsvaluef2f1values
2条回答

我发现了一个更简单的解决方案,使用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}

然后继续:

^{pr2}$

(基本上是在对json函数做出反应之前做这项工作——显然这需要事先知道值,还可以使用更多变量。)

对于问题的第一部分-错误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}

相关问题 更多 >

    热门问题