go 语言,如何实现这样的嵌套循环?

2022-05-25 19:05:50 +08:00
 olddogs

请问在数据库里面查询出来的列表,如何循环出这样的分组结构呢?

"manage": {
   "ent": {
   "export": true,
   "get": true,
   "plan": true
  }
},
"oa": {
   "user": {
     "add": true,
     "addDept": true,
     "addUser": true,
     "get": true,
     "plan": true
  }
}

用 php 可以通过循环,这样拼接,但是用 go 就玩不好了

$newList[$v['name']][$v1['name']][$v2['name']] = true

感谢!

3395 次点击
所在节点    Go 编程语言
45 条回复
choury
2022-05-25 22:25:15 +08:00
定义一个结构
struct Child{
Id int `json:"id"`
Name string `json:"name"`
ParentId int `json:"parent_id"`
Children json.RawMessage `json:"children"`
}

把结果发序列化之后,把 child.Children 字段继续递归反序列化,最后存到一个数组就行了
olddogs
2022-05-25 22:34:18 +08:00
@iamzuoxinyu 可能理解错了吧,我是要拍平成类似链表的感觉
iamzuoxinyu
2022-05-25 22:36:53 +08:00
@olddogs 树状怎么可能变成链表。
olddogs
2022-05-25 22:42:17 +08:00
@iamzuoxinyu o(╥﹏╥)o ,好吧,看来我只能换个思路了,哎,多谢了
playniuniu
2022-05-25 23:50:50 +08:00
完全没看明白想干啥,如果是想动态解析 json 文件,然后取得里面一些值的话,试试 gjson

https://github.com/tidwall/gjson
GeruzoniAnsasu
2022-05-26 07:20:27 +08:00
你写的是 list 转 map

然后你问 map 压平怎么压




你真的搞清楚你想问什么了????


这个看不懂的话就没人能帮你了
https://go.dev/play/p/oje5ib9Pu-n
cnbattle
2022-05-26 08:19:30 +08:00
List 的 key index 拼接处理成 map 的 key?
GeruzoniAnsasu
2022-05-26 08:36:07 +08:00
1a7489
2022-05-26 10:14:13 +08:00
用 go 把 json 发送给 php 处理完了在返回 json🤣🤣🤣
MoYi123
2022-05-26 10:51:38 +08:00
能给个输入+对应的输出吗?
给了 2 个例子, 一个没输入, 一个没期望输出.

要操作树, 你肯定要会 bfs 和 dfs, 这 2 个不理解, 代码肯定不会写.
tbxark
2022-05-26 19:06:10 +08:00
用这个 https://github.com/tidwall/gjson, 你的意思应该是根据 keypath 获取 value 吧
```go
package main

import "github.com/tidwall/gjson"

const json = `{"name":{"first":"Janet","last":"Prichard"},"age":47}`

func main() {
value := gjson.Get(json, "name.last")
println(value.String())
}
```
olddogs
2022-05-27 15:49:42 +08:00
@playniuniu 不是想解析 json ,我贴 json ,是为了给看结构
olddogs
2022-05-27 15:52:19 +08:00
@GeruzoniAnsasu 不是啊,其实我就是要把 sql 查出来的 List ,里面 的 key index 拼接处理成 map 的 key
GeruzoniAnsasu
2022-05-27 16:28:41 +08:00
@olddogs 你贴了 4 次代码都没解释清楚源结构是什么目标结构是什么,我真的服气。

#15
> 是的,就是打算把树状拍平,有咩有办法啊? 大佬

查询出来的 list 是平坦的,你到底要从 k-v list 拼出一个树还是要把深度>1 的树平坦化成 k-v list ,至今是矛盾的。



你给了这么多示例的 json ,全完全不提表结构是什么,最后一次贴的这有上百个不同单词的 json ,你想让别人怎么心灵感应每个单词 /字段从哪来?




其实上面这么多回复,有灵性的早都可以想出来了

1. 并不需要 map[string]map[string] ....,map[string]interface{} 就足够了
2. children 这种嵌套可以用自引用模型直接在查询时查出一个嵌套的结构体
3. 你第一条附言给的数据 flatten 的代码给你了,你试了吗
4. gorm 的文档你好好看了吗,嵌套 preload 你看到了吗
GeruzoniAnsasu
2022-05-27 16:30:49 +08:00
你好像不知道你贴的所有 json 都不叫「一个列表」
lbp0200
2022-05-27 18:58:34 +08:00
巨婴伸手党,等着别人喂
olddogs
2022-05-28 13:07:04 +08:00
@GeruzoniAnsasu 抱歉啊,这几天太忙了,昨天有比较急的事,搞到很晚,目标结构就是我最后一次贴的 json ,其实我现在已经换了一种方法实现了,也就是最后一次贴的代码,只是实现的比较蹩脚,我用 go 输出的树结构,然后我用 vue 拿到数据后,通过 js 的写法实现的!
olddogs
2022-05-28 13:07:42 +08:00
@tbxark 不是的,是我最后一次贴的 json ,这个是最终要实现的
olddogs
2022-05-28 13:09:28 +08:00
@choury 额,我要的不是一个数组,是最后一次我贴的 json ,非常感谢
olddogs
2022-05-28 13:10:36 +08:00
@LoNeFong 类似吧

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

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

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

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

© 2021 V2EX