基于命名空间嵌套合并 JSON

Nest and merge JSON based on namespaces

我有以下 JSON 文档:
(按命名空间排序;任何命名空间都可以出现多次)

[ {"namespace": "/"       , "exports": {"a": 10, "b": 11}}
, {"namespace": "/"       , "exports": {"c": 12, "d": 13}}
, {"namespace": "/bar"    , "exports": {"e": 14, "f": 15}}
, {"namespace": "/bar/baz", "exports": {"g": 16, "h": 17}}
]

我需要转换成这个 JSON 文档:
(可以忽略键冲突的风险)

{ "a": 10
, "b": 11
, "c": 12
, "d": 13
, "bar": { "e": 14
         , "f": 15
         , "baz": { "g": 16
                  , "h": 17}}}

请注意,在嵌套命名空间时,我们只保留它们的基本名称,例如,

/
/bar
/bar/baz
/bar/baz/bat

变为:

{"bar": {"baz": {"bat": {}}}}

成员必须嵌套在其相应的命名空间对象下,唯一的期望是根 "/" 命名空间的成员成为顶级属性。

我已经为这个问题绞尽脑汁好几次了,因为我想一次性完成(理想情况下),但我愿意接受任何其他建议。

将命名空间转换为路径,您可以使用 getpath/setpath 内置函数构建所需的输出。

reduce .[] as {$namespace, $exports} ({};
  ($namespace | ltrimstr("/") | split("/")) as $path
  | setpath($path; getpath($path) + $exports)
)

Online demo