如何使用相同的键在嵌套json对象中构造数组

如何使用相同的键在嵌套json对象中构造数组,json,go,zabbix,Json,Go,Zabbix,我正在通过Golang中的微服务在Zabbix中创建主机对象。我必须为您提供以下json 用于创建属于多个组的主机的Zabbix api { "jsonrpc": "2.0", "method": "host.create", "params": { "host": "TEST-HOST", "interfaces": [ { "type": 2, "main": 1, "useip": 1,

我正在通过Golang中的微服务在Zabbix中创建主机对象。我必须为您提供以下json 用于创建属于多个组的主机的Zabbix api

{
  "jsonrpc": "2.0",
  "method": "host.create",
  "params": {
    "host": "TEST-HOST",
    "interfaces": [
      {
        "type": 2,
        "main": 1,
        "useip": 1,
        "ip": "0.0.0.0",
        "dns": "",
        "port": "10050"
      }
    ],
    "groups": [
      {
        "groupid": "33"
      },
      {
        "groupid": "27"
      }
    ],
    "templates": [
      {
        "templateid": "12156"
      }
    ],
    "inventory_mode": 0
  },
  "auth": "example_token",
  "id": 1
}
此代码返回组数组为空的json对象

主程序包
进口(
“字节”
“编码/json”
“fmt”
)
类型Zabbix结构{
Jsonrpc字符串`json:“Jsonrpc”`
方法字符串`json:“方法”`
Params Params`json:“Params”`
Auth字符串`json:“Auth”`
ID int`json:“ID”`
}
类型组结构{
Groupid字符串`json:“Groupid”`
Groupid1字符串`json:“groupid”`
}
类型模板结构{
Templateid字符串`json:“Templateid”`
}
类型库存结构{
类型字符串`json:“类型”`
标记字符串`json:“标记”`
TypeFull字符串`json:“type_full”`
macaddress字符串`json:“macaddress_a”`
MacaddressB字符串`json:“macaddress_b”`
SerialA string`json:“serialno_a”`
SerialB字符串`json:“serialno_b”`
}
类型参数结构{
主机字符串`json:“主机”`
接口[]接口`json:“接口”`
Groups[]Groups`json:“Groups”`
Templates[]Templates`json:“模板”`
InventoryMode int`json:“库存模式”`
库存`json:“库存”`
}
类型接口结构{
Type int`json:“Type”`
Main int`json:“Main”`
Useip int`json:“Useip”`
IP字符串`json:“IP”`
DNS字符串`json:“DNS”`
端口字符串`json:“端口”`
}
func main(){
jsonobj:=&Zabbix{
Jsonrpc:“2.0”,
方法:“host.create”,
Params:Params{
主持人:“OBU_测试_123”,
接口:[]接口{
{
类型:2,
主要内容:1,,
Useip:1,
IP:“10.10.10.10”,
DNS:“”,
端口:“10050”,
},
},
组:[]组{
{
Groupid:“27”,
组ID1:“33”,
},
},
模板:[]模板{
{
Templateid:“12156”,
},
},
存货:存货{
类型:“车载设备”,
标签:“测试”,
TypeFull:“测试”,
麦卡德雷萨:“测试”,
MacaddressB:“测试”,
连载:“测试”,
连载:“测试”,
},
库存模式:0,
},
Auth:“测试令牌”,
ID:1,
}
byteArray,err:=json.Marshal(jsonobj)
如果错误!=零{
恐慌(错误)
}
fmt.Print(bytes.NewBuffer(byteArray.String())
}
输出:

{
  "jsonrpc": "2.0",
  "method": "host.create",
  "params": {
    "host": "OBU_TEST_123",
    "interfaces": [
      {
        "type": 2,
        "main": 1,
        "useip": 1,
        "ip": "10.10.10.10",
        "dns": "",
        "port": "10050"
      }
    ],
    "groups": [
      {}
    ],
    "templates": [
      {
        "templateid": "12156"
      }
    ],
    "inventory_mode": 0,
    "inventory": {
      "type": "On Board Unit",
      "tag": "test",
      "type_full": "test",
      "macaddress_a": "test",
      "macaddress_b": "test",
      "serialno_a": "test",
      "serialno_b": "test"
    }
  },
  "auth": "test-token",
  "id": 1
}
我错过了什么?有没有更优雅的方法来创建如此大的json对象而不是使用结构

类型组结构{ Groupid字符串
json:“Groupid”
Groupid1字符串
json:“groupid”
}

groupid-不能为两者的相同值。按如下方式更改它,它应该可以工作。 类型组结构{ Groupid字符串
json:“Groupid”
Groupid1字符串
json:“Groupid1”
}

groupid-不能为两者的相同值。按如下方式更改它,它应该可以工作

type Groups struct {
    Groupid  string `json:"groupid"`
    Groupid1 string `json:"groupid1"`
}

组中
两个字段都有相同的
json
标记字段名,这不好。只要有
有一个
Groupid
字段,并用值(而不是一个)实例化切片即可。。。。示例:
Groups
是一个对象数组,其中有一个名为
groupid
的整数字段。这不是你实现的。这是另一种方式。然而,如果你对模型有把握的话,这并不是一个很好的使用界面的实践,就像在本例中一样。这并不是你的成就所在。在您的解决方案中,第二个键是不同的。这意味着Zabbix api将拒绝该请求。
type Groups struct {
    Groupid  string `json:"groupid"`
    Groupid1 string `json:"groupid1"`
}