【发布时间】:2021-07-14 02:58:00
【问题描述】:
如何使用 jq 将树中的某个匹配节点替换为从根节点到该节点的路径?
使用walk,只能访问从当前节点到树下的路径:
https://jqplay.org/s/BVOQ-xa1JM:
walk(if type == "object" and has("d") then .d = path(.) else . end)
输入:
{"a": {"b": 1, "c": {"d": 2}}, "e": {"d}
结果:
{
"a": {
"b": 1,
"c": {
"d": []
}
},
"e": {
"d": []
}
}
想要的结果是:
{
"a": {
"b": 1,
"c": {
"d": ["a", "c"]
}
},
"e": {
"d": ["e"]
}
}
注意:这不能导致整个树的重复,如下所示:
(paths | select(.[-1] == "d")) as $f | setpath($f; $f[:-1])
什么原因:
{
"a": {
"b": 1,
"c": {
"d": [
"a",
"c"
]
}
},
"e": {
"d": 3
}
}
{
"a": {
"b": 1,
"c": {
"d": 2
}
},
"e": {
"d": [
"e"
]
}
}
【问题讨论】:
-
我已将示例结果更正为从根到
c的路径为["a","c"]。