结构转换的JSON

问题描述 投票:1回答:3

这是我的结构:

type Resource struct {
    Name string `json:"name"`
    Ranges struct {
        Range []struct {
            Begin int `json:"begin"`
            End   int `json:"end"`
        } `json:"range"`
    } `json:"ranges,omitempty"`
    Role string `json:"role,omitempty"`
    Type string `json:"type"`
    Scalar Scalar `json:"scalar,omitempty"`
}

我不知道如何在JSON中制作字段而不是null。例如,struct Range就是这样的:

{
    "name": "cpus",
    "ranges": {
        "range": null
    },
    "type": "SCALAR",
    "scalar": {
        "value": 1
    }
}, {
    "name": "mem",
    "ranges": {
        "range": null
}
json go
3个回答
0
投票

一种方法是将范围分配为*string然后你应该将它与nil进行比较,如果不是nil将其转换为字符串并再次编组它


0
投票

那改变struct解决了我的问题:

type Resource struct {
    Name   string  `json:"name"`
    Ranges *Ranges  `json:"ranges,omitempty"`
    Role   string  `json:"role,omitempty"`
    Type   string  `json:"type"`
    Scalar *Scalar `json:"scalar,omitempty"`
}

0
投票

假设您要编组问题中的结构并获得如下所示的json输出:

  {
    "name": "cpus",
    "ranges": {
      "range": []
    },
    "type": "SCALAR",
    "scalar": {
      "value": 1
    }
  },
  {
    "name": "mem",
    "ranges": {
      "range": []
    }
  }

在golang切片中,[]是一个引用类型,由数组支持。你可以在这里阅读切片的内部:https://blog.golang.org/go-slices-usage-and-internals

基本上你在输出中获得null的原因是因为你没有实例化切片,切片本质上是一个指针,而且指针是nil。

创建一个新的空切片,如[]Range{},并将其分配给当前在json中的null的Resource中的字段,而不是nil指针,您将有一个空切片,将被编组为[]而不是null

© www.soinside.com 2019 - 2024. All rights reserved.