在 Robot 框架中解析 JSON 输出 [在论坛中尝试了大多数选项]

Posted

技术标签:

【中文标题】在 Robot 框架中解析 JSON 输出 [在论坛中尝试了大多数选项]【英文标题】:Parsing JSON output in Robot framework [Tried most options in the forum] 【发布时间】:2021-03-04 04:31:41 【问题描述】:

我有一个这样的 JSON 输出:


   ":output":
      "response":" \"ParentId\" : 125,  \"ParentKey\" :  \"key\" : \"9aqews-uwdguwdw8-9uw8\",                  \"identity\" : \"key_ID=674\"  "
   
 

我正在尝试获取key的内容,即:9aqews-uwdguwdw8-9uw8

这里有一些尝试:

 ------------------------------------------------------
 $json_data    Parse Json    $output
 Log    $json_data["output"]["response"]
 Log    $json_data["output"]["response"][0][0:10]
 ------------------------------------------------------

 $json=    Convert To Dictionary    $values
 $j_keys=    Get Dictionary Keys    $json
 Log  $j_keys
 ------------------------------------------------------

 $values=    Evaluate    json.loads($output)    json
 Log  $values['output']['response'][1]
 -----------------------------------------------------

 $KeySP=  Get Substring  $values  "key" ","
 Log  $keySP
 ------------------------------------------------------

  #$parkeydict=  $values['output']['response']
  #$keyspacedict=   $parkeydict['ParentKey']
  #Log  $keyspacedict['key']

 ------------------------------------------------------

我尝试了其他几个步骤、可能性和关键字, 我能解析的最好的方法是直到 "Log $json_data["output"]["response"]" 从'response'返回数据。

即使我转换为 Dict 并访问“键”,它也会失败,我认为“响应”之后的进一步数据完全存储为值。

有人可以帮助/指导我如何捕获“关键”变量中的数据吗?

提前致谢!

【问题讨论】:

关键字Parse Json从何而来? 导入HTTP库的时候来的 【参考方案1】:

第一个问题是你尝试使用['output'],但是key是:output

第二个问题是“response”键的值不是字典,它是一个看起来像字典的字符串。在尝试从中提取值之前,您必须将其转换为字典,假设它确实是一个格式正确的 json 字典,而不仅仅是一个可能看起来像字典的字符串。

这适用于我在问题中提供的确切数据:

$values=      Evaluate      json.loads($output)
$response=    Evaluate      json.loads($values[':output']['response'])
$key=         set variable  $response['ParentKey']['key']

should be equal  $key  9aqews-uwdguwdw8-9uw8

注意:如果您使用的机器人版本早于 3.2,则需要将json 作为Evaluate 命令的最后一个参数包含在内,以便机器人知道导入模块。从 3.2 及更高版本开始,表达式中使用的模块会自动导入。

【讨论】:

感谢高亮,实际代码只有 ['output']。我对您提供的解决方案进行了一些调试。我们需要在评估后指定名称“json”。如果我们没有添加它,它会给出“失败:NameError: name 'json' is not defined”。感谢您的解决方案。 “我们需要在评估后指定名称 'json'。” - 这仅适用于早于 3.2 的机器人版本。来自Evaluate关键字的官方文档:“从Robot Framework 3.2开始,表达式中使用的模块将自动导入” 啊,我猜我的组织使用的是旧版本!也许这就是我无法弄清楚的原因! "output": "ParentKey": "key": "9b92e6638-c5f7a66c0cc1", "id": "uid=260" Hi @Bryan 我们如何获取密钥空间这个输出?谢谢!!!

以上是关于在 Robot 框架中解析 JSON 输出 [在论坛中尝试了大多数选项]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Robot + Linux在json文件中以UTC(Zulu UTC)格式替换当前时间?

如何只读取一次 JSON 并在 Robot Framework 的同一个机器人文件中多次使用它

虫师自动化测试robot Framework 框架的学习

如何定制 Robot Framework 的测试报告

机器人框架从 JSON 列表中获取

ROBOT 中的 Json 处理