关于带层级的列表转 json 对象的问题

2021-03-25 11:37:51 +08:00
 anankun

原始数据

数据库里有这样的一些数据

_id p_id parm_key parm_value parm_type
0 -1 template object
10 0 name template-name string
20 0 inputs object
201 20 parameters [object]
2011 201 name this-is-name-1 string
2012 201 value this-is-value-1 string
2013 201 name this-is-name-2 string
2014 201 value this-is-value-2 string

其中:

需求

要根据上述的数据结构,生成以下格式的 json 对象或者 json 字符串:

{
    "template": {
        "name": "template-name",
        "inputs": {
            "parameters": [
                {
                    "name": "this-is-name-1",
                    "value": "this-is-value-1"
                },
                {
                    "name": "this-is-name-2",
                    "value": "this-is-value-2"
                }
            ]
        }
    }
}

用什么样的方法能够做到这种转换呢?

1567 次点击
所在节点    程序员
5 条回复
66beta
2021-03-25 11:40:11 +08:00
递归,遍历树
anankun
2021-03-25 13:45:19 +08:00
递归是可以,想一想实现起来有点忒麻烦
0x666666
2021-03-25 14:24:32 +08:00
递归
no1xsyzy
2021-03-25 14:37:05 +08:00
如果 (parm_key, parm_type) 对的种类固定且不多的话可以用 GraphQL,只要写出相当于 (parm_key, parm_type) 那么多个 key 就行了。
不然你还是老老实实游走树吧。
Xbluer
2021-03-25 15:36:13 +08:00
Entity 中多加属性 parent 和 childList.

List<Entity> 转换成一个 Map<_id, Entity>。遍历 list,使用 map 把 entity 中的 parent 赋值,并把当前 entity 添加岛 parent.childList 中。如果 map 中查询结果是 null,那就是树的 root 。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/764944

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX