我正在努力将文本文件转换为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结构,我尝试了很多事情,但是不知道是否应该使用结构,接口或方法。
要为此进行转换:
[
{
"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
谢谢
答案 0 :(得分:1)
您可以像在问题中一样从文件中读取数据,并对字符串进行一些额外的验证和修剪,然后将模板数据替换为real。我正在使用固定数据来演示如何做。
这里是示例:
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)
}