json - jq,变量,选择和数字?
问题描述
似乎 jq 的“选择”与变量一起使用时,仅适用于文本字符串,但不适用于数字。如何使用 jq 以便无论值是否为数字都可以选择?
$ cat test.json
[
{
"id": "some-text",
"output": "jq select works!"
},
{
"id": 123,
"output": "jq select doesn't work :("
}
]
- 让我们尝试选择“id”为“some-text”的“输出” - 它有效:
$ ID="some-text"
$ cat test.json | jq -r --arg ID "$ID" '.[] | select(.id==$ID) | .output'
jq select works!
$
- 让我们尝试选择“id”为“123”的“输出” - 它不起作用:
$ ID="123"
$ cat test.json | jq -r --arg ID "$ID" '.[] | select(.id==$ID) | .output'
$
- 有趣的是,如果我不通过 --arg 传递变量,“选择”确实有效:
$ cat test.json | jq -r '.[] | select(.id==123) | .output'
jq select doesn't work :(
我究竟做错了什么?
解决方案
您可以使用--argjson
off-arg
来让 JQ 将其作为数字处理:
➜ ID="123"
➜ cat test.json | jq -r --argjson ID "$ID" '.[] | select(.id==$ID) | .output'
jq select doesn't work :(
➜
您还可以使用tostring
将 ID 转换为字符串,以便保留现有格式;
➜ ID="123"
➜ cat test.json | jq -r --arg ID "$ID" '.[] | select(.id|tostring==$ID) | .output'
jq select doesn't work :(
➜
➜ ID="some-text"
➜ cat test.json | jq -r --arg ID "$ID" '.[] | select(.id|tostring==$ID) | .output'
jq select works!
➜
推荐阅读
- angularjs - 自定义元素指令不起作用
- php - 登录控制器中覆盖的身份验证方法不起作用
- c# - Twilio/Authy 返回 401 和验证码
- java - 无法用空格替换二维数组中的默认零
- sql-server - 使用 AD 凭据通过 SSH 隧道从 Mac 连接到 Visual Studio Code 中的 MS SQL 实例?
- reactjs - 在 react-leaflet 中渲染 1000 多个标记需要很长时间,而且用户体验很糟糕,需要改进我的方法
- r - 用 'x[is.na(x)]=0' 将 NA 替换为 0 会替换整个数据帧,而不仅仅是 NA?
- python - 为列表中的每个值添加键的快速方法
- c# - ASP.Net Core 2.0 不是可选选项
- c++ - 将双精度数组转换为 std::complex