仅在存在值时使用jq提取值

  • 本文关键字:jq 提取 存在 jq
  • 更新时间 :
  • 英文 :


我有一个大的记录文件,其中包含如下所示的字段:

{
"id": "1000001",
"updatedDate": "2018-12-21T01:52:00Z",
"createdDate": "1993-11-30T02:59:25Z",
"varFields": [
{
"fieldTag": "b",
"content": "1000679727"
},
{
"fieldTag": "v",
"content": "v.1"
}

}

我需要提取。content元素和其他东西,但只有当与它相关联的fieldTag是"v"。只有部分记录包含fieldTag "v"

当我尝试使用

进行解析时
(.varFields[] |select(.fieldTag=="v") | "(.content)") // ""

只要v存在就可以正常工作。但是,当它不存在时,我得到

jq: error (at <stdin>:353953): Cannot iterate over null (null)

我试图通过多种变化来消除错误,包括

效果的东西
(select((.varFields[] |select(.fieldTag=="v") | .content) != null) | .varFields[] |select(.fieldTag=="v") | "(.content)") // ""

,但我仍然得到相同的错误。我错过了什么?

看看错误抑制操作符?这有点像新的?Javascript中的可空链操作符。

The ? operator, used as EXP?, is shorthand for try EXP.
Example:
jq '[.[]|(.a)?]'
Input   [{}, true, {"a":1}]
Output  [null, 1]

在https://jqplay.org/jq?q=%5B.%5B%5D%7C(.a)%3F%5D&j=%5B%7B%7D%2C%20true%2C%20%7B%22a%22%3A1%7D%5D有一个稍微简单一点的可演示示例,如果您只需要自定义错误处理(或只是忽略错误…),则try-catch操作符与此类似。

最新更新