求助各位爹:使用 Go 转换树形 JSON 数据平铺为 []map[string]any 单层数据列表格式

17次阅读

共计 2688 个字符,预计需要花费 7 分钟才能阅读完成。

本人算法较弱,问了各种 GPT,始终不能得到期望的结果,特来求助各位爹。需要将一个树形的 JSON 数据,从每一个子节点的最后一级节点向上级节点平铺,转换为单层数据列表,以下是相关 原数据 目标字段 JSONPath期望得到的结果

原数据

{
    "mainData": [
        {
            "id": 1,
            "name:": "a",
            "sub": [
                {
                    "title": "A",
                    "used": true
                },
                {
                    "title": "B",
                    "used": false
                }
            ]
        },
        {
            "id": 2,
            "name:": "c",
            "sub": [
                {
                    "title": "C",
                    "used": true
                },
                {
                    "title": "D",
                    "used": false,
                    "s_data": [
                        {
                            "s_data_id": 4,
                            "s_data_value": 0.1
                        },
                        {
                            "s_data_id": 5,
                            "s_data_value": 0.2
                        }
                    ]
                }
            ]
        }
    ],
    "moreData": [
        {
            "m_id": 3,
            "m_name:": "e",
            "sub": [
                {
                    "s_title": "E",
                    "s_used": true,
                    "ext": {
                        "cid": "3_1",
                        "remark": "complex"
                    }
                },
                {
                    "s_title": "F",
                    "s_used": false,
                    "ext": {
                        "cid": "3_2",
                        "remark": "complex"
                    },
                    "children": [
                        {
                            "c_c_id": "3_2_1",
                            "c_c_title": "321"
                        },
                        {
                            "c_c_id": "3_2_2",
                            "c_c_title": "322"
                        }
                    ]
                }
            ]
        }
    ]
}

目标字段 JSONPath 列表

["$.mainData[*].id",
    "$.mainData[*].name",
    "$.mainData[*].sub[*].title",
    "$.mainData[*].sub[*].used",
    "$.mainData[*].sub[*].s_data[*].s_data_id",
    "$.mainData[*].sub[*].s_data[*].s_data_value",
    "$.moreData[*].m_id",
    "$.moreData[*].m_name",
    "$.moreData[*].sub[*].s_title",
    "$.moreData[*].sub[*].s_used",
    "$.moreData[*].sub[*].ext.cid",
    "$.moreData[*].sub[*].ext.remark",
    "$.moreData[*].sub[*].children[*].c_c_id",
    "$.moreData[*].sub[*].children[*].c_c_title"
]

期望得到的结果


[
  {"$.mainData[*].id": 1,
    "$.mainData[*].name": "a",
    "$.mainData[*].sub[*].title": "A",
    "$.mainData[*].sub[*].used": true
  },
  {"$.mainData[*].id": 1,
    "$.mainData[*].name": "a",
    "$.mainData[*].sub[*].title": "B",
    "$.mainData[*].sub[*].used": false
  },
  {"$.mainData[*].id": 2,
    "$.mainData[*].name": "c",
    "$.mainData[*].sub[*].title": "C",
    "$.mainData[*].sub[*].used": true
  },
  {"$.mainData[*].id": 2,
    "$.mainData[*].name": "c",
    "$.mainData[*].sub[*].title": "D",
    "$.mainData[*].sub[*].used": false,
    "$.mainData[*].sub[*].s_data[*].s_data_id": 4,
    "$.mainData[*].sub[*].s_data[*].s_data_value": 0.1
  },
  {"$.mainData[*].id": 2,
    "$.mainData[*].name": "c",
    "$.mainData[*].sub[*].title": "D",
    "$.mainData[*].sub[*].used": false,
    "$.mainData[*].sub[*].s_data[*].s_data_id": 5,
    "$.mainData[*].sub[*].s_data[*].s_data_value": 0.2
  },
  {"$.moreData[*].m_id": 3,
    "$.moreData[*].m_name": "e",
    "$.moreData[*].sub[*].s_title": "E",
    "$.moreData[*].sub[*].s_used": true,
    "$.moreData[*].sub[*].ext.cid": "3_1",
    "$.moreData[*].sub[*].ext.remark": "complex"
  },
  {"$.moreData[*].m_id": 3,
    "$.moreData[*].m_name": "e",
    "$.moreData[*].sub[*].s_title": "F",
    "$.moreData[*].sub[*].s_used": false,
    "$.moreData[*].sub[*].ext.cid": "3_2",
    "$.moreData[*].sub[*].ext.remark": "complex",
    "$.moreData[*].sub[*].children[*].c_c_id": "3_2_1",
    "$.moreData[*].sub[*].children[*].c_c_title": "321"
  },
  {"$.moreData[*].m_id": 3,
    "$.moreData[*].m_name": "e",
    "$.moreData[*].sub[*].s_title": "F",
    "$.moreData[*].sub[*].s_used": false,
    "$.moreData[*].sub[*].ext.cid": "3_2",
    "$.moreData[*].sub[*].ext.remark": "complex",
    "$.moreData[*].sub[*].children[*].c_c_id": "3_2_2",
    "$.moreData[*].sub[*].children[*].c_c_title": "322"
  }
]
正文完
 0