当前位置: 首页 > 知识库问答 >
问题:

如何加入两个json路径查询在jeter的json路径提取器?

裴欣荣
2023-03-14

假设我有这个流行的数据样本。

{
    "store": {
        "book": [
            {
                "category": "reference",
                "author": "Nigel Rees",
                "title": "Sayings of the Century",
                "price": 8.95
            },
            {
                "category": "fiction",
                "author": "Evelyn Waugh",
                "color": "red", 
                "title": "Sword of Honour",
                "price": 12.99
            },
            {
                "category": "fiction",
                "author": "Herman Melville",
                "color": "blue", 
                "title": "Moby Dick",
                "isbn": "0-553-21311-3",
                "price": 8.99
            },
            {
                "category": "fiction",
                "author": "J. R. R. Tolkien",
                "title": "The Lord of the Rings",
                "isbn": "0-395-19395-8",
                "price": 22.99
            }
        ],
        "bicycle": {
            "color": "red",
            "price": 19.95
        }
    },
    "expensive": 10
}

我想从这里得到的是一本所有的<代码>书,其中<代码>类别==小说和所有的<代码>自行车,其中<代码>颜色==红色。

也就是说,我想要,

   {
        "category": "fiction",
        "author": "Evelyn Waugh",
        "color": "red", 
        "title": "Sword of Honour",
        "price": 12.99
    },
    {
        "category": "fiction",
        "author": "Herman Melville",
        "color": "blue", 
        "title": "Moby Dick",
        "isbn": "0-553-21311-3",
        "price": 8.99
    },
    {
        "category": "fiction",
        "author": "J. R. R. Tolkien",
        "title": "The Lord of the Rings",
        "isbn": "0-395-19395-8",
        "price": 22.99
    },
    "bicycle": {
         "color": "red",
         "price": 19.95
    }

我知道,我可以用$.store.book[?(=="小说")]实现有针对性的书籍和$.store.bicycle[?(实现自行车的针对性。

但我怎样才能同时做到这两个呢?


共有3个答案

尉迟明辉
2023-03-14

要归还书籍和自行车,您需要:

$..*[?(@.color== 'red' || @.category == 'fiction')] 

对于颜色==红色或类别==小说的书籍,您需要:

$.store.*[?(@.color== 'red' || @.category == 'fiction')] 
耿俊
2023-03-14

我建议使用JSR223后处理器和Groovy语言实现您的场景。从过滤数据中提取元素并构建新JSON的示例代码如下所示:

import groovy.json.JsonBuilder
import groovy.json.JsonSlurper

def json = new JsonSlurper().parseText(prev.getResponseDataAsString())

def fictionBooks = json.store.book.findAll {it.category == "fiction"}
def redBikes = json.store.bicycle.findAll{it.color="red"}

JsonBuilder builder = new JsonBuilder(fictionBooks + redBikes)

prev.setResponseData(builder.toPrettyString())

上面的代码将用过滤的JSON替换父采样器响应数据

参考文献:

  • Groovy:解析和生成JSON
文喜
2023-03-14

您可以使用

$. store.*[?(红色' || @.类别)

将获取您想要的结果

 类似资料:
  • 问题内容: JSON Path Expression应该是什么来获取beneficiary_ids 问题答案: 您所需的JSON路径表达式将如下所示:

  • 在给定的json文档中,如何验证是否存在json路径? 我使用的是jayway jsonpath,代码如下 上述代码可能会引发以下异常 通用域名格式。乱穿马路。jsonpath。PathNotFoundException:路径:$['a.b.c']没有结果 为了缓解这种情况,我打算在尝试使用JsonPath读取该路径之前验证该路径是否存在。阅读 作为参考,我看了以下两个文档,但没有真正得到我想要的

  • 我只想从文件的完整路径中获取文件夹路径。 例如,我希望只得到(不包括)。 我曾经尝试过这样的事情: 但它给了我这样一个结果: 这不是我需要的结果(是)。 关于如何获取文件路径有什么想法吗?

  • 在实现持久底部栏时,当单击底部栏中的按钮时,需要恢复以前的路由。 单击底部栏中的按钮时,会保存其当前路线路径(/a/b/c ),并根据按钮的单击恢复先前保存的路线。 从概念上讲,用户会认为每个按钮都是一个工作区,其状态永远不会丢失(包括后退堆栈)。用户可以安全地从一个工作区切换到另一个工作区。 当路由重绕到根时,如何在Flutter中获取当前路由路径?

  • 这是我回应的一部分: 我有10个事件,每个事件下我都有venue_name,我需要检查是否所有这些事件都包含“纽约”(这是根据地点结果进行搜索) 在Json路径提取器中,我的参数是: 目标变量名:venue_name JSONPath表达式:$...venue_name 默认值:NOT_FOUND 我应该如何更正我的BeanShell代码?