【问题标题】:How to traverse through all elements of json using robotframework and fetch only those that match the query如何使用robotframework遍历json的所有元素并仅获取与查询匹配的元素
【发布时间】:2020-12-29 07:18:40
【问题描述】:

我正在尝试从 json 文件中提取与同一元素中的另一个节点匹配的 json 元素的节点。 更具体地说,我想要下面示例 json 中所有具有“已认证”:“假”的学生的姓名

Example JSON
{
    "Students": [
        {
            "name": "John",
            "Rank": "1",
            "certified":"false"
        },
        {

            "name": "Ashley",
            "Rank": "5",
            "certified":"true"
        }
    ]
}

我使用的代码是(给我空输出):

Library    JSONLibrary

JSON_Verification
    [Documentation]    Testing JSON load logic
    ${metadataJson_object}=    Load JSON From File    ../TestData/sample.json
    Log    ${metadataJson_object}
    @{studentName}=    Get Value From Json    ${metadataJson_object}    "$..[?(@.certified=='false')]@.name"
    Log @{studentName}

【问题讨论】:

  • 您现在使用的代码是做什么的,与您想要的有什么不同?
  • @BryanOakley 它给了我空输出

标签: json robotframework


【解决方案1】:

确实,您非常接近它,过滤后不需要@ 符号。只需将json路径更改为= $.Students[?(@.certified=='false')].name

这里:
$ -> 根元素
. -> 子运算符或访问属性
?() -> 过滤表达式和
@ -> 当前节点

${json}=      Convert String to JSON    ${Getjson}
${name}=      Get Value From Json         ${json}        $.Students[?(@.certified=='false')].name

输出

【讨论】:

  • 我尝试将 jsonpath 更改为“$.Students[?(@.certified=='false')].name”。仍然得到空输出。我认为这是因为“从文件加载 JSON”给了我字典而不是 json。
  • {JSON_Verification_sample [文档] 测试 JSON 加载逻辑 ${metadataDict_object}= 从文件加载 JSON ../TestData/sample.json 日志 ${metadataDict_object} ${studentName}= 从 Json ${ 中获取值metadataDict_object} "$.Students[?(@.certified=='false')].name" :FOR ${name} IN @{studentName} \ Log ${name} ${length} 获取长度 ${metadataDict_object["学生"]} 日志 ${length}
  • 我用你的代码试过它应该返回你John作为值
  • 我收到空输出。只是想知道如何在此处在 cmets 中附加屏幕截图
  • 没有办法在 cmets 中附加屏幕截图,附加屏幕截图也是不好的做法
猜你喜欢
  • 1970-01-01
  • 2012-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多