在jq
脚本中,我需要使用路径值对(比旧的键值对更通用)创建 json 对象。也就是说,我需要使用路径而不是键,以便在更深层次上创建值。(这些路径是外部提供的,所以我事先不知道它们。)
例如,在非工作伪代码中,我想使用路径来创建这样的对象:
jq -n '{"a"."x" : 3, "b"."y" : 4}'
这样它就会创建相同的 json 对象jq -n '{"a":{"x" : 3}, "b":{"y" : 4}}'
,即
{
"a": {
"x": 3
},
"b": {
"y": 4
}
}
在某种程度上,这类似于mdir -p
允许直接创建一个包含路径上所有祖先目录的目标目录。但我需要对(许多)json 对象执行此操作。因此,问题是:
使用本机 jq(可能加上一些 bash)通过路径值对创建对象的最简单方法是什么?
(我正在寻找一种复杂度较低且不需要进行大量编程的解决方案。这是在 Ubuntu 24.04 LTS 下使用 jq-1.7.1 实现的)
-- 澄清 --
我想到的输入是路径列表加上值列表,例如:
[".a.x", ".b.y"]
和
[3, 4]
。路径由点分隔。为简单起见,我假设点之间的每个部分都是一个简单的标识符,例如y
(而不是复杂的标识符,例如"y.z"
)。也就是说,我不考虑(目前)这样的路径:
[".a.x", ".b.\"y.z\""]