gpt4 book ai didi

jsonpath - 使用 jsonPath 查找字符串

转载 作者:行者123 更新时间:2023-11-30 23:51:41 25 4
gpt4 key购买 nike

我正在尝试使用 jsonPath 和 pick 函数来确定是否需要根据当前域运行规则。我正在做的事情的简化版本在这里:

    global 
{
dataset shopscotchMerchants <- "https://s3.amazonaws.com/app-files/dev/merchantJson.json" cachable for 2 seconds
}

rule checkdataset is active
{
select when pageview ".*" setting ()
pre
{
merchantData = shopscotchMerchants.pick("$.merchants[?(@.merchant=='Telefora')]");
}
emit
<|
console.log(merchantData);
|>
}

我期望的控制台输出是 Telefora 对象,而不是我从 json 文件中获取所有三个对象。

如果我使用merchantID==16 而不是merchant=='Telefora',那么效果很好。我认为 jsonPath 也可以匹配字符串。尽管上面的示例没有针对 json 的 MerchantDomain 部分进行搜索,但我遇到了同样的问题。

最佳答案

您的问题来自这样一个事实,如 the documentation 中所述,字符串相等运算符是 eq , neq , 和 like . ==仅适用于数字。在您的情况下,您想测试一个字符串是否等于另一个字符串,这是 eq 的工作字符串相等运算符。

只需交换 ==eq在你的 JSONpath 过滤器表达式中,你会很高兴:

    global 
{
dataset shopscotchMerchants <- "https://s3.amazonaws.com/app-files/dev/merchantJson.json" cachable for 2 seconds
}

rule checkdataset is active
{
select when pageview ".*" setting ()
pre
{
merchantData = shopscotchMerchants.pick("$.merchants[?(@.merchant eq 'Telefora')]"); // replace == with eq
}
emit
<|
console.log(merchantData);
|>
}

我在自己的测试规则集中对此进行了测试,其来源如下:
ruleset a369x175 {
meta {
name "test-json-filtering"
description <<

>>
author "AKO"
logging on
}

dispatch {
domain "exampley.com"
}

global {
dataset merchant_dataset <- "https://s3.amazonaws.com/app-files/dev/merchantJson.json" cachable for 2 seconds
}

rule filter_some_delicous_json {
select when pageview "exampley.com"
pre {
merchant_data = merchant_dataset.pick("$.merchants[?(@.merchant eq 'Telefora')]");
}
{
emit <|
try { console.log(merchant_data); } catch(e) { }
|>;
}
}
}

关于jsonpath - 使用 jsonPath 查找字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5560455/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com