技术解析

关于带层级的列表转 json 对象的问题
0
2021-06-08 08:20:36
idczone

原始数据

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

_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

其中:

  • id 和 p_id 是表示层级关系的
  • parm_key 对应的是某个对象的属性名称
  • parm_value美国服务器 是 parm_type 为 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"
                }
            ]
        }
    }
}

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


递归,遍历树

递归是可以,想一想实现起来有点忒麻烦

递归

如果 (parm_key, parm_type) 对的种类固定且不多的话可以用 GraphQL,只要写出相当于 (parm_key, parm_type) 那么多个 key 就行了。
不然你还是老老实实游走树吧。

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

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服