登录
首页 >  Golang >  Go问答

将TXT文件转换为Json格式的操作方法(Golang版)

来源:stackoverflow

时间:2024-03-18 09:39:28 201浏览 收藏

将文本文件转换为 JSON 格式在 Golang 中可以实现,通过读取文件内容并对字符串执行验证和修剪,可以将文本数据转换为 JSON 结构。此转换过程涉及将文本行拆分为键值对,并将模板数据替换为实际数据。利用 Golang 中的数据结构,可以将转换后的数据组织成 JSON 数组或对象,从而便于进一步处理或存储。

问题内容

我正在努力尝试将文本文件转换为 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

谢谢


解决方案


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

示例如下:

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)
}

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>