我一直在玩JQ https://jqplay.org提取 JSON 数据,我看到了 test
操作,它允许我使用正则表达式来提取数据。在下面的示例运行中,我将正则表达式模式 "^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
进行比较。这是一条很长的路,它会起作用,但我很好奇是否有人知道更好、更有效的方法。
谢谢
最佳答案
以下似乎是您所追求的:
map(. as $in | select("progressive" | test($in|.["genre"])))
($in|.["genre"]
可以缩写为 $in.genre
但我留下了管道以使事情更清晰。)
注意我们如何使用。作为 $in
进行设置,以便我们可以使用适当的输入和参数调用 test
。
变化
少打字一点...
map(.genre as $g | select("progressive" | test($g)))
关于regex - 使用正则表达式的 JQ 搜索对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50032199/