gpt4 book ai didi

json - 如何使用jq对对象进行展平的逆操作?

转载 作者:行者123 更新时间:2023-12-01 16:22:04 25 4
gpt4 key购买 nike

通过另一个 SO 线程,我发现了如何使用 jq“扁平化”JSON。我正在寻找如何做相反的事情,即“解压”它。

原始 JSON 在层次结构中具有混合级别,例如:

{
"X1": {
"X1o1": {
"X1o1o1": "abc",
"X1o1o2": "def"
},
"X1o2" : {
"X1o2o1" : "ghi",
"X1o2o2": "jkl"
},
"X1o3": "mno"
},
"X2": "pqr"
}

https://jqplay.org/s/Eo6h_3V8PO显示,为了与其他同事一起工作,我需要使用
reduce (tostream|select(length==2)) as $i ({}; .[[$i[0][]|tostring]|join("_")] = $i[1] )

生产:
{
"X1_X1o1_X1o1o1": "abc",
"X1_X1o1_X1o1o2": "def",
"X1_X1o2_X1o2o1": "ghi",
"X1_X1o2_X1o2o2": "jkl",
"X1_X1o3": "mno",
"X2": "pqr"
}

我需要帮助的是如何使用 jq 将这样的输出 JSON 转换回原始形式?

我看到 split仅适用于 tostring | split("_") 中的字符串.

任何指导我朝着正确方向前进的指针和/或示例将不胜感激。

最佳答案

使用您的样本输入,过滤器:

reduce to_entries[] as $kv ({}; setpath($kv.key|split("_"); $kv.value))

产生:
{
"X1": {
"X1o1": {
"X1o1o1": "abc",
"X1o1o2": "def"
},
"X1o2": {
"X1o2o1": "ghi",
"X1o2o2": "jkl"
},
"X1o3": "mno"
},
"X2": "pqr"
}

关于json - 如何使用jq对对象进行展平的逆操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57154970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com