Parsing 解析在null或[]时停止
我有一个很好的过滤器,但是在一个新的用例中属性“p”可以为null或空数组[]之后,解析器停止计算表达式 “.p[]?.product.productId”当p为null或空数组[]时,问题就在这里 当我有这样的p属性时,它工作得很好。[{}]或[{“id”:123}] 我把过滤器分成几行,让它更容易理解Parsing 解析在null或[]时停止,parsing,null,jq,Parsing,Null,Jq,我有一个很好的过滤器,但是在一个新的用例中属性“p”可以为null或空数组[]之后,解析器停止计算表达式 “.p[]?.product.productId”当p为null或空数组[]时,问题就在这里 当我有这样的p属性时,它工作得很好。[{}]或[{“id”:123}] 我把过滤器分成几行,让它更容易理解 .p as $p | .p[]?.product.productId as $pa | .io[] | select(.product.productId == ($pa) or .de
.p as $p
| .p[]?.product.productId as $pa
| .io[]
| select(.product.productId == ($pa) or .description == "product description x")
| .product.productId as $pid
| {"offerId": .offerId,
"description": .description,
"required":
"($p[] | select(.product.productId == $pid) | .required)",
"applied": false,
"amount": (if .prices | length == 0
then 0
elif .prices[0].amount != null
then .prices[0].amount
else .prices[0].amountPercentage
end)}
输入:
{
"p": null,
"io": [{
"offerId": 5593,
"description": "product description x",
"product": {
"productId": 393,
"description": "product description x 2",
"type": "Insurance"
},
"prices": [
{
"amount": null,
"amountPercentage": 4.13999987,
"status": "On"
}
]
}]
}
我只想在p为null或[]时忽略它
*我知道这个文字表达式“($p[]| select(.product.productId==$pid)|.required)”
jqplay.org/s/wYwKUFM2XR
问候
try E catch empty
,而您似乎想要的是try E catch null
或者E?//空
.p[]?
与.p?[]
或.p?[]不同:
当
p
为null
时会发生什么?这个表达式也是错误的“必需的”:“($p[]| select(.product.productId==$pid)|.required)”
它打印过滤器的文本值我忘了提到它,我留下了文本以使过滤器工作,但我也需要这个逻辑。我希望得到独立于p的过滤器工作。p有其他属性,我可以在该文本表达式上用诸如false之类的默认值替换。好吧,但是,如果p为null,该怎么办呢?如果p为null,我只想忽略它,就忽略它!非常感谢,但我没有收到任何错误,只是不工作。。。看这里。尝试在p上设置任何值,比如[{}],它就会工作。请参阅更新。在将来,如果您尝试遵循at的指导原则,这将是一个好主意-特别是,提供一个最小的示例和预期结果。
$ jq -n '[] | .p[]?'
jq: error (at <unknown>): Cannot index array with string "p"
$ jq -n '[] | .p?[]'
$
$ jq -n '[] | .p?[]?'
$
$ jq -n '[] | try .p[] catch null'
$