- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是来 self 的 curl 的示例 JSON 响应:
{
"success": true,
"message": "jobStatus",
"jobStatus": [
{
"ID": 9,
"status": "Successful"
},
{
"ID": 2,
"status": "Successful"
},
{
"ID": 99,
"status": "Failed"
}
]
}
我想查看 ID=2 的状态。这是我试过的命令:
cat test.txt|jq --arg v "2" '.jobStatus[]|select(.ID == $v)|.status'
回复:没有
我尝试了不带引号的 2
值,但仍然没有结果。
相比之下,如果我尝试使用 literal 2
命令,它会起作用:
cat test.txt | jq '.jobStatus[]|select(.ID == 2)|.status'
回复:
"Successful"
我卡住了。谁能帮我找出问题所在?
最佳答案
jq
是数据类型感知的:
.ID
,在 JSON 输入中定义,是一个数字,
但是任何通过 --arg
传递的命令行参数(比如这里的 v
)总是 string(无论你是否引用该值),
因此,为了比较它们,您必须使用显式类型转换,例如 tonumber/1
:
jq --arg v '2' '.jobStatus[] | select(.ID == ($v | tonumber)) | .status' test.txt
鉴于您只在此处传递一个标量参数,以下解决方案使用--argjson
(jq
v1.5+ ) 有点矫枉过正,但它是显式类型转换的替代方案,因为传递 JSON 参数实际上传递了typed 数据:
jq --argjson v '{ "ID": 2 }' '.jobStatus[] | select(.ID == $v.ID) | .status' test.txt
peak's answer证明甚至 --argjson v 2
有效(在这种情况下与 $v
直接比较有效),这肯定是最简洁解决方案,但可能需要解释:
尽管 2
可能看起来不像 JSON,但它是:它是一个有效的 JSON 文本,包含一个值输入数字(参见json.org)。
2
是一个以数字 开头的未加引号 标记,这使它成为JSON(等效于 JSON string 的值是 "2"
,它必须从 shell 传递为 '"2 "'
- 注意嵌入的双引号)。因此jq
将--argjson -v 2
解释为一个数字,并比较.ID == $ v
按预期工作(请注意,这同样适用于 --argjson -v '2'
/--argjson -v "2"
,其中 shell在 jq
看到值之前删除引号)。
相比之下,您使用 --arg
传递的任何内容始终是按原样使用的字符串值。
换句话说:--argjson
,其目的是接受任意JSON文本作为字符串(例如'{ "ID": 2 }'
在上面的示例中)也可以用于传递数字字符串标量以强制将它们解释为数字。
同样的技术也适用于 bool 字符串 true
和 false
。
帽子的提示 peak感谢他的帮助。
关于json - 使用 jq --arg 传递的数字参数与 == 不匹配的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41772776/
我在数组中有一系列 [timestamp, count] 对,我想使用 jq 计算每个时间戳的累积和。我怎么能那样做? 这里是一个示例数据集: [ [1431047957699, 1], [1
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我在数组中有一系列 [timestamp, count] 对,我想使用 jq 计算每个时间戳的累积和。我怎么能那样做? 这里是一个示例数据集: [ [1431047957699, 1], [1
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我很好奇是否有一种干净的方法可以将行号添加到 jq 的输出,同时仍然保留输出的颜色。我已经尝试从 jq 到 cat -n 的管道,但不幸的是,这删除了在遍历 JSON 树时有很大帮助的着色。 最佳答案
我有一些看起来像json数据: { "p": { "d": { "a" : { "r": "foo", "g": 1 },
我正在使用 jq 在大文件中搜索特定结果。我不关心与此特定条件匹配的重复条目,并且处理整个文件需要一段时间。我想做的是打印有关第一场比赛的一些详细信息,然后在文件上终止 jq 命令以节省时间。 IE。
给定以下 JSON 文件 foo.js(为清楚起见已删除): {"a":{"b":[{"x":{"x1":1},"y":{"y1":5}},{"x":{"x1":1},"y":{"y1":6}}]}}
我需要从一些 JSON 中一次删除多个键(使用 jq ),并且我正在尝试了解是否有比每次调用 map 和 del 更好的方法。这是我的输入数据: test.json [ { "label"
我正在使用 jq 来解析日志数据,偶尔日志包含格式错误的内容(无效的 json),当发生这种情况时,jq 会在此时中止处理。 有没有办法让 jq 继续处理它可以做的事情,同时通过 stderr 报告问
我无法理解以下示例中显示的 jq(版本 1.6)更新运算符的行为。 为什么示例 1 返回更新后的对象,而示例 2 和 3 返回空对象或错误结果? 例子之间的区别仅在于将字符串转换为数字的函数的调用顺序
给定 [3,4] [5,2] 我想制作: [5,2] [3,4] 我试过了,但失败了: echo '[3,4] [5,2]' | jq 'sort_by(.[1])' jq: error (at :1
我有一个要用 JQ 处理的 JSON 文件。它在另一个对象中有一个对象数组,带有一个我想用来填充新数组的键。 在我的实际用例中,它嵌套在许多其他的绒毛中,还有更多的数组,但将其作为此类事物的一个更简单
我有这个 jq筛选: some_command | jq -r '.elements[] | select(.state=="LIVE" and .group == "some_text" and .
我无法理解以下示例中显示的 jq(版本 1.6)更新运算符的行为。 为什么示例 1 返回更新后的对象,而示例 2 和 3 返回空对象或错误结果? 例子之间的区别仅在于将字符串转换为数字的函数的调用顺序
给定 [3,4] [5,2] 我想制作: [5,2] [3,4] 我试过了,但失败了: echo '[3,4] [5,2]' | jq 'sort_by(.[1])' jq: error (at :1
我刚刚发现 jq 并且非常喜欢它。一件事我发现自己做了很多事情,比如: result=$(jq --raw-output '.some | .filters // ""') if [[ $result
我一直在尝试使用 chocoletey 安装 jq 但是,当我运行以下命令时,它失败了。 choco install jq 阅读日志文件,我看到它指向 Powershell 脚本指向一个不再存在的 U
json block 数组中的数千个 json block 之一如下所示 - { "id": 4409976, "name": "MKLIU", "version": "1.0", "
json block 数组中的数千个 json block 之一如下所示 - { "id": 4409976, "name": "MKLIU", "version": "1.0", "
我是一名优秀的程序员,十分优秀!