我一直在使用JQ https://jqplay.org来提取JSON数据,我看到了允许我使用regex提取数据的test操作。在下面的示例运行中,我将regex模式"^progressive$"传入test以搜索数据:
数据
[
{"genre": "progressive"},
{"genre": "a progressive 1"}
]查询
map(select(.genre | test("^progressive$")))结果
[
{
"genre": "progressive"
}
]==========================================================================
现在,我想做上面的相反的事情。JSON中的genre值是我的正则表达式,我在test中传递的是数据。例如:
数据
[
{"genre": "^progressive$"},
{"genre": "^abc$"}
]查询
我还没有计算出这个查询:(但我尝试过跟随,但它没有返回我想要的内容,也没有出错。
map(select("progressive" | test(.["genre"])))预期结果
[
{
"genre": "^progressive$"
}
]我不知道是否可以这样做,或者是否有人知道该怎么做。我正在考虑做一条很长的路,它将遍历数组中的每个对象,提取出genre值,然后与progressive进行比较。这是一个很长的路,它将工作,但我很好奇,如果有人知道一个更好和更有效的方式。
谢谢
发布于 2018-04-25 22:44:20
以下似乎是你所追求的目标:
map(. as $in | select("progressive" | test($in|.["genre"])))($in|.["genre"]可以缩写为$in.genre,但为了使事情变得更清楚,我留下了管道。)
注意我们是如何使用. as $in设置的,这样我们就可以用适当的输入和参数调用test。
变化
少打字一点..。
map(.genre as $g | select("progressive" | test($g)))https://stackoverflow.com/questions/50032199
复制相似问题