【发布时间】:2023-01-19 18:08:47
【问题描述】:
考虑这个 json 文档
$ DATA='{ "url": "https::/abc/", "issues": { "1": { "number": 1}, "2": {"number": 2 } } }'
$ echo $DATA | jq .
{
"url": "https::/abc/",
"issues": {
"1": {
"number": 1
},
"2": {
"number": 2
}
}
}
我正在尝试向 issues 对象添加一个名为 extra 的新字段,该对象是 .url 字段和 .number 字段的组合。
所以结果应该是这样的
{
"url": "https::/abc/",
"issues": {
"1": {
"number": 1,
"extra": "https::/abc/1"
},
"2": {
"number": 2,
"extra": "https::/abc/2"
}
}
通过将 .url 字段存储在变量 ($URL) 中,我可以到达那里的一部分
$ echo $DATA | jq '.url as $URL | .issues[] += { "extra" : "\( $URL )" } '
{
"url": "https::/abc/",
"issues": {
"1": {
"number": 1,
"extra": "https::/abc/"
},
"2": {
"number": 2,
"extra": "https::/abc/"
}
}
}
问题来自于访问.number。
仅在复合值中引用 .number 返回 null
$ echo $DATA | jq '.url as $URL | .issues[] += { "extra" : "\( $URL )\( .number )" } '
{
"url": "https::/abc/",
"issues": {
"1": {
"number": 1,
"extra": "https::/abc/null"
},
"2": {
"number": 2,
"extra": "https::/abc/null"
}
}
}
下一次尝试是尝试将 .number 存储在变量中,但这没有用
$ echo $DATA | jq '.url as $URL | .issues[].number as $NUM += { "extra" : "\( $URL )\( $NUM )" } '
jq: error: syntax error, unexpected +=, expecting '|' (Unix shell quoting issues?) at <top-level>, line 1:
.url as $URL | .issues[].number as $NUM += { "extra" : "\( $URL )\( $NUM )" }
jq: 1 compile error
关于我所缺少的任何想法?
【问题讨论】:
标签: jq