为了账号安全,请及时绑定邮箱和手机立即绑定

在 GoLang 中将 JSON 目录树转换为缩进的纯文本

在 GoLang 中将 JSON 目录树转换为缩进的纯文本

Go
呼啦一阵风 2021-11-29 16:52:14
我在 JSON 结构中有一个目录树,我正试图以纯文本格式对其进行格式化。将其格式化为 XML 或 YAML 非常简单。以纯文本格式对其进行格式化比我想象的要困难得多。JSON 结构的格式如下:type File struct {   Name     string  `json:"Name"`   Children []*File `json:"Children"`}由于 JSON 结构允许“子项”,因此 JSON 是嵌套的,并且由于它是一个目录树,我不知道嵌套的深度(在合理范围内)。我需要转换后的 JSON 如下所示:base_dir  sub_dir_1  sub_dir_2    file_in_sub_dir_2  sub_dir_3  ...谁能告诉我如何以一种相当简单的方式做到这一点?现在我不得不使用制表符进行大量循环和缩进的蛮力,而且我确信 Go 中有一种更优雅的方式。
查看完整描述

2 回答

?
HUH函数

TA贡献1836条经验 获得超4个赞

编写一个函数来递归打印文件及其子文件的目录树。向下递归树时增加缩进级别。


func printFile(f *File, indent string) {

   fmt.Printf("%s%s\n", indent, f.Name)

   for _, f := range f.Children {

     printFile(f, indent+"  ")

   }

}

使用树的根调用函数:


printFile(root, "")


查看完整回答
反对 回复 2021-11-29
?
holdtom

TA贡献1805条经验 获得超10个赞

您可以使用MarshalIndent实现这一点。这是一个go playground例子。


instance := MyStruct{12344, "ohoasdoh", []int{1, 2, 3, 4, 5}}

res, _ := json.MarshalIndent(instance, "", "  ")

fmt.Println(string(res))

这会给你类似的东西:


{

  "Num": 12344,

  "Str": "ohoasdoh",

  "Arr": [

    1,

    2,

    3,

    4,

    5

  ]

}


查看完整回答
反对 回复 2021-11-29
  • 2 回答
  • 0 关注
  • 230 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信