我正在尝试找到使用 Go 创建此 JSON 对象的最佳方法:


{

  "Clients" : [

    {

      "Hostname" : "example.com",

      "IP" : "127.0.0.1",

      "MacAddr" : "mactonight"

    },

    {

      "Hostname" : "foo.biz",

      "IP" : "0.0.0.0",

      "MacAddr" : "12:34:56:78"

    }

  ]

}

在我现有的代码中,我目前正在分割多个字符串行,然后将每行拆分为 3 个单独的变量(主机、ip、mac)。例如hostname 192.168.1.0 F0:F0:F0:F0:F0被连续转换。


这是通过以下代码完成的:


func parselines(line string){

    for _, line := range strings.Split(line, "\n") {

        if line != "" {

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

            host, ip, mac := s[0], s[1], s[2]

            fmt.Println("Hostname: " + host + " IP: " + ip + " MAC: " + mac)

        }

    }

}

所以在这个 for 循环中,我希望构建上面提到的 JSON 对象。我已经尝试过使用结构,但我真的很困惑如何使用它们。我已经用 Ruby 完成了这项工作,这需要几行代码,但 Go 似乎非常具有挑战性(对我来说就是这样!)。在红宝石中它是这样完成的:


require 'json'


clients = []


STDIN.each do |line|

  fields = line.split(/\s+/)

  clients << {

    Hostname: fields[0],

    IP: fields[1],

    MacAddr: fields[2]

  }

end


connections = {}

connections[:Clients] = clients

puts connections.to_json