为了账号安全,请及时绑定邮箱和手机立即绑定

在 Golang 中创建此 JSON 对象的最佳方法

在 Golang 中创建此 JSON 对象的最佳方法

Go
守着一只汪 2022-06-13 15:02:30
我正在尝试找到使用 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]  }endconnections = {}connections[:Clients] = clientsputs connections.to_json
查看完整描述

3 回答

?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

声明与 JSON 文档结构匹配的类型。


type client struct {

    Hostname string `json:"Hostname"`

    IP       string `json:"IP"`

    MacAddr  string `json:"MacAddr"`

}


type connection struct {

    Clients []*client `json:"Clients"`

}

使用这些类型初始化值并编码为 JSON。


var clients []*client

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

    if line != "" {

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

        clients = append(clients, &client{Hostname: s[0], IP: s[1], MacAddr: s[2]})

    }

}


p, _ := json.Marshal(connection{Clients: clients})

fmt.Printf("%s\n", p)

json:"Hostname"此示例中不需要JSON 字段标记 ( ),因为 JSON 对象键是有效的导出标识符。我在这里包含标签是因为它们经常被需要。


查看完整回答
反对 回复 2022-06-13
?
缥缈止盈

TA贡献2041条经验 获得超4个赞

创建切片和映射以匹配所需数据的结构。


var clients []interface{}

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

    if line != "" {

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

        clients = append(clients, map[string]string{"Hostname": s[0], "IP": s[1], "MAC": s[2]})

    }

}

connections := map[string]interface{}{"Clients": clients}

p, _ := json.Marshal(connections)

fmt.Printf("%s\n", p)


查看完整回答
反对 回复 2022-06-13
?
拉丁的传说

TA贡献1789条经验 获得超8个赞

您需要初始化 2 个结构


type Client struct {

    Hostname string

    IP string

    MacAddr string

}


type Connection struct {

    Clients []Client

}

并使用 Marshal 将 struct 转换为 Json


var clients []Client

clients = append(clients, Client{

    Hostname: "localhost",

    IP: "127.0.0.1",

    MacAddr: "1123:22512:25632",

})


// add more if you want ...


myJson, _ := json.Marshal(Connection{Clients:clients})

fmt.Println(string(myJson))

不要忘记导入这个


import "encoding/json"


查看完整回答
反对 回复 2022-06-13
  • 3 回答
  • 0 关注
  • 448 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信