json - 在 Golang 中将 TXT 文件转换为 Json

标签 json go

<分区>

我正在努力尝试将文本文件转换为 JSON。 我不能在实现中使用 python 来限制它,所以它需要在 Go 中。

我有这个文件结构

VAULT_ADDR=https://address.com
SECRET_USERNAME={{tata/user}}
SECRET_PASSWORD={{tata/pass}}
SECRET_SLACK_TOKEN={{tata/token}}

SECRET_CONTENTFUL_SPACE_ID={{tata/space}}
SECRET_CONTENTFUL_ACCESS_TOKEN={{tata/stuff}}

SECRET_NEW_RELIC_TOKEN={{tata/tata}}

我需要将其隐藏为 JSON 结构,我尝试了很多方法但不知道是否应该使用结构、接口(interface)或如何执行此操作。

想为此转换:

[  
{  
    "name":"VAULT_ADDR",
    "value":"https://address.com"
},
{  
    "name":"SECRET_USERNAME",
    "value":"{{tata/user}}"
},
{  
    "name":"SECRET_PASSWORD",
    "value":"{{tata/pass}}"
},
{  
    "name":"SECRET_SLACK_TOKEN",
    "value":"{{tata/token}}"
},
{  
    "name":"SECRET_CONTENTFUL_SPACE_ID",
    "value":"{{tata/space}}"
},
{  
    "name":"SECRET_CONTENTFUL_ACCESS_TOKEN",
    "value":"{{tata/stuff}}"
},
{  
    "name":"SECRET_NEW_RELIC_TOKEN",
    "value":"{{tata/tata}}"
}
]

到目前为止,这是我的代码...

package main

import (
  "flag"
  "fmt"
  "io/ioutil"
  "log"
  "os"
  "strings"
)

 var (
   file string
)

 func main() {

   flag.StringVar(&file, "f", "", "file path")
   flag.Parse()

   data, err := os.Open(file)
   if err != nil {
      log.Fatal(err)
   }
   defer data.Close()

   file, err := ioutil.ReadAll(data)

   converter := string(file)

   s := strings.Split(converter, "=")

   for _, line := range s {
      parser := "name" + line

      fmt.Println(parser)
   }

 }

我的代码输出:

name= VAULT_ADDR value
name= https://address.com
SECRET_USERNAME value
name= {{tata/user}}
SECRET_PASSWORD value
name= {{tata/pass}}
SECRET_SLACK_TOKEN value
name= {{tata/token}}

SECRET_CONTENTFUL_SPACE_ID value
name= {{tata/space}}
SECRET_CONTENTFUL_ACCESS_TOKEN value
name= {{tata/stuff}}

SECRET_NEW_RELIC_TOKEN value
name= {{tata/tata}} value

谢谢

最佳答案

您可以像在问题中那样从文件中读取数据,并对字符串执行一些额外的验证和修整,并将模板数据替换为真实的。我正在使用固定数据来演示如何操作。

例子如下:

package main

import (
    "encoding/json"
    "fmt"
    "strings"
)

type Element struct {
    Name  string `json:"name"`
    Value string `json:"value"`
}

func main() {
    var data = `VAULT_ADDR = "https://address.com"
SECRET_USERNAME = "{{tata/user}}"
SECRET_PASSWORD = "{{tata/pass}}"
SECRET_SLACK_TOKEN = "{{tata/token}}"
SECRET_CONTENTFUL_SPACE_ID = "{{tata/space}}"
SECRET_CONTENTFUL_ACCESS_TOKEN = "{{tata/stuff}}"
SECRET_NEW_RELIC_TOKEN = "{{tata/tata}}"`

    var dataSlice = make([]Element, 0)
    lines := strings.Split(data, "\n")
    for _, line := range lines {
        keyVal := strings.Split(line, "=")
        dataSlice = append(dataSlice, Element{Name: keyVal[0], Value: keyVal[1]})
        // dataSlice[keyVal[0]] = keyVal[1]
        // in real code make sure the dataSlice has length==2
    }
    bts, err := json.Marshal(dataSlice)
    if err != nil {
        panic(err)
    }
    fmt.Printf("%s", bts)
}

关于json - 在 Golang 中将 TXT 文件转换为 Json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56649243/

相关文章:

javascript - 如何为 Object.define() 定义的属性创建唯一的 toJSON 方法

go - 如何在字符串文字中转义反引号

go - 如何从主机获取 PeerInfo?

go - 如何用golang打印?

c# - Newtonsoft.Json,填充字典失败

json - body-parser读取json post数据node.js express

java - 流式传输 json 元素

json - 如何在 Spring MVC 中将字符串转换为对象

GoREST 端点路径

http - golang静态服务器总是返回404页面未找到