【发布时间】:2021-01-16 22:27:41
【问题描述】:
我有几个要解析的 .json 文件(或者更确切地说,是由 xq/yq 预先解析的 .xml 文件)。不幸的是,我想读取的元素 (.size) 可以在一个额外的数组中(在这种情况下我会 select 其中一个)或只是一个对象,如下所示:
{
"Obj1": {
"size": "123"
},
"Obj2": [
{ "size": "3" },
{ "size": "5" }
]
}
在Obj1 的情况下,查询jq '.[].size' 产生“123”,正如预期的那样,但对于Obj2 却失败,并出现错误Cannot index array with string 'size'。
对于Obj2,要获得单个size 值(例如最大值),查询jq '.[]|max.size 会产生“5”,正如预期的那样。但这对于 Obj1 失败,错误 object {"size":"123"} cannot be iterate over。
是否有表达式将单个子对象 {"size":"123"} 视为具有一个元素的数组,或者允许我使用相同的查询处理这两种情况?
【问题讨论】:
-
@peak:实际上,没有。对于这个简单的案例,
max.size做了正确的事情。由于对象中只有一个键值对(键为size),所以max_by(.size)|.size和max()都产生5,而不管只比较.size的值还是整个对象@987654340 @. -
显然我误解了你的问题。如果您更严格地遵循
mcve指南,这可能会有所帮助。无论如何,请查看更新后的答案。 -
我已将问题和您的评论读了三次,但仍然不知道您在这里问什么。