数据:
[{"id": "first", "val": 1}, {"id": "second", "val": 2}, {"id": "second", "val": 3}]
查询:
.[] | map(select(.id == "second"))
预期:
{"id": "second", "val": 2}, {"id": "second", "val": 3}
结果:
Cannot index string with string "id"
https://jqplay.org/jq?q=.%5B%5D%20%7C%20select(.id%20%3D%3D%20%22second%22(&j=%5B%7B%22id%22%3A%20%22first%22%2C%20%22val%220%3A%201%7D%2C%20%7B%22id=22%3A%20%22second%22%2C+20%22val%22%3A%02%7D%5D
为什么会出现这样的结果?
map(select(.id == "second"))
需要一个对象数组,而.[]
将它们从数组中取出,因此之后的所有内容都必须能够处理单个项。
在您的jqplay示例中,您的过滤器是.[] | select(.id == "second")
,并且运行良好。
现在应该很清楚如何解决您的问题;(