【发布时间】:2021-02-24 10:55:47
【问题描述】:
我的这个过滤器运行良好,但是在属性“p”可以为 null 或空数组 [] 的新用例之后,解析器停止计算表达式。
".p[]?.product.productId" 问题出在此处,当 p 为 null 或空数组 [] 时。
当我拥有这样的 p 属性时,它运行良好。 [{}] 或 [{"id":123}]
为了便于理解,我将过滤器分成几行。
.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
问候
【问题讨论】:
-
当
p是null时会发生什么? -
这个表达式也是错误的
"required": "($p[] | select(.product.productId == $pid) | .required)"它打印过滤器的文字值 -
我忘了提及它,我留下了文字以使过滤器工作,但我也需要这个逻辑。我期望过滤器独立于 p 工作。 p 具有其他属性,我可以在该文字表达式上用默认值(如 false)替换它们。
-
好的,但是,如果
p为空,应该怎么办? -
如果P为null,我只想忽略它!