登录
首页 >  Golang >  Go问答

解析:Golang 中如何处理嵌套的 JSON 数组

来源:stackoverflow

时间:2024-02-19 08:36:22 478浏览 收藏

在IT行业这个发展更新速度很快的行业,只有不停止的学习,才不会被行业所淘汰。如果你是Golang学习者,那么本文《解析:Golang 中如何处理嵌套的 JSON 数组》就很适合你!本篇内容主要包括##content_title##,希望对大家的知识积累有所帮助,助力实战开发!

问题内容

我在解组嵌套 json 数组时遇到问题。示例如下:

{
  "Subnets": [
    {
      "AvailabilityZone": "xx",
      "AvailabilityZoneId": "xx",
      "AvailableIpAddressCount": 173,
      "CidrBlock": "xx",
      "DefaultForAz": "xx",
      "MapPublicIpOnLaunch": "xx",
      "MapCustomerOwnedIpOnLaunch": "xx",
      "State": "xx",
      "SubnetId": "xx",
      "VpcId": "xx",
      "OwnerId": "xx",
      "AssignIpv6AddressOnCreation": "xx",
      "Ipv6CidrBlockAssociationSet": [],
      "Tags": [
        {
          "Key": "Name",
          "Value": "xx"
        },
        {
          "Key": "workload",
          "Value": "xx"
        },
        {
          "Key": "xx",
          "Value": "xx"
        },
        {
          "Key": "aws:cloudformation:stack-name",
          "Value": "xx"
        },
        {
          "Key": "host_support_group",
          "Value": "xx"
        },
        {
          "Key": "environment",
          "Value": "xx"
        },
        {
          "Key": "client",
          "Value": "xx"
        },
        {
          "Key": "aws:cloudformation:stack-id",
          "Value": "xx"
        },
        {
          "Key": "application",
          "Value": "Subnet"
        },
        {
          "Key": "xx",
          "Value": "xx"
        },
        {
          "Key": "xx",
          "Value": "xx"
        },
        {
          "Key": "xx",
          "Value": "xx"
        },
        {
          "Key": "regions",
          "Value": "ca-central-1"
        }
      ],
      "SubnetArn": "xx"
    }]
  ,
  "ResponseMetadata": {
    "RequestId": "xx",
    "HTTPStatusCode": 200,
    "HTTPHeaders": {
      "x-amzn-requestid": "xx",
      "cache-control": "no-cache, no-store",
      "strict-transport-security": "max-age=31536000; includeSubDomains",
      "content-type": "text/xml;charset=UTF-8",
      "content-length": "3176",
      "vary": "accept-encoding",
      "date": "xx",
      "server": "AmazonEC2"
    },
    "RetryAttempts": 0
  }
}

我想要的唯一值是 "availableipaddresscount",我尝试使用 interface{} 但无法获得必要的值。这是 golang 演示链接 - 演示

错误- 我使用接口时遇到此错误{}

是否有其他方法可以从 json 对象中提取“availableipaddresscount”值?

感谢任何帮助或参考。


正确答案


您可以创建一个包含所需字段的结构,并使用该结构解组 json 字节,该结构将填充结构中提到的字段。

type something struct {
    availableipaddresscount int `json:"availableipaddresscount"`
}

var data something
if err := json.unmarshal(byt, &data); err != nil {
        panic(err)
}

availableipaddresscount = data.availableipaddresscount

go 使用静态结构来解码 json,因此您可能需要创建一个至少包含您正在查找的内容的结构。如果您有结构,则可以像这样访问 availableipaddresscount

tmp.subnets[0].availableipaddresscount

这是演示 https://play.golang.org/p/FsjeOubov1Q

要从示例 json 创建 json 结构,您可以使用 this 等工具。

如果您需要循环遍历所有子网:

for _, subnet := range tmp.Subnets {
    fmt.Println(subnet.AvailableIPAddressCount)
}

如果你想动态使用json,也可以使用https://github.com/spf13/viper。但它可能比静态解码慢。

今天关于《解析:Golang 中如何处理嵌套的 JSON 数组》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>