【问题标题】:Converting map to string in Go在golang中将地图转换为字符串
【发布时间】:2018-06-17 09:54:10
【问题描述】:

我正在努力寻找转换的最佳方式

map[string]string 输入字符串。我尝试使用 marshall 转换为 json 以保持格式,然后转换回字符串,但这并不成功。更具体地说,我正在尝试将包含键和 val 的映射转换为字符串以容纳 https://www.nomadproject.io/docs/job-specification/template.html#environment-variables https://github.com/hashicorp/nomad/blob/master/nomad/structs/structs.go#L3647

例如最后的字符串应该是这样的

LOG_LEVEL="x"
API_KEY="y"    

地图

m := map[string]string{
        "LOG_LEVEL": "x",
        "API_KEY": "y",
    }

【问题讨论】:

  • 是的,你能解释一下最后的字符串应该怎么做吗?
  • 您没有展示您尝试过的内容,而且您的描述非常模糊。从表面上看,这些值并不都是字符串(例如:true 与字符串"true" 不同)。

标签: json go nomad


【解决方案1】:

我知道您需要在代表一个映射条目的每一行上使用一些键=值对。

附:您刚刚更新了您的问题,我发现您仍然需要在值周围加上引号,所以引号来了

package main

import (
    "bytes"
    "fmt"
)

func createKeyValuePairs(m map[string]string) string {
    b := new(bytes.Buffer)
    for key, value := range m {
        fmt.Fprintf(b, "%s=\"%s\"\n", key, value)
    }
    return b.String()
}
func main() {
    m := map[string]string{
        "LOG_LEVEL": "DEBUG",
        "API_KEY":   "12345678-1234-1234-1234-1234-123456789abc",
    }
    println(createKeyValuePairs(m))

}

工作示例: Go Playground

【讨论】:

    【解决方案2】:

    您可以使用fmt.Sprint将地图转换为字符串:

    import (
        "fmt"
    )
    
    func main() {
        m := map[string]string{
            "a": "b",
            "c": "d",
        }
    
        log.Println("Map: " + fmt.Sprint(m))
    }
    

    fmt.Sprintf:

    import (
        "fmt"
    )
    
    func main() {
        m := map[string]string{
            "a": "b",
            "c": "d",
        }
    
        log.Println(fmt.Sprintf("Map: %v", m))
    }
    

    【讨论】:

      【解决方案3】:

      我会这样做非常简单实用:

      package main
      
      import (
          "fmt"
      )
      
      func main() {
          m := map[string]string{
              "LOG_LEVEL": "x",
              "API_KEY":   "y",
          }
      
          var s string
          for key, val := range m {
              // Convert each key/value pair in m to a string
                  s = fmt.Sprintf("%s=\"%s\"", key, val)
              // Do whatever you want to do with the string;
              // in this example I just print out each of them.
              fmt.Println(s)
              }
      }
      

      您可以在 The Go Playground 中看到这一点

      【讨论】:

      • 配置文件可能很长,这就是我使用 bytes.buffer 的原因
      • @ShabanNaasso:我同意;这取决于用例。
      【解决方案4】:
      jsonString, err := json.Marshal(datas) 
      fmt.Println(err)
      

      【讨论】:

        【解决方案5】:

        这个怎么样?

        // Marshal the map into a JSON string.
        mJson, err := json.Marshal(m)   
        if err != nil {
            fmt.Println(err.Error())
            return
        }
        
        jsonStr := string(mJson)
        fmt.Println("The JSON data is:")
        fmt.Println(jsonStr)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-05-03
          • 2017-01-19
          • 1970-01-01
          • 2014-02-27
          • 2017-04-28
          • 1970-01-01
          • 2016-08-11
          相关资源
          最近更新 更多