从二维结构体数组中读取值的Golang实现

从二维结构体数组中读取值的Golang实现 我需要从以下数组中读取“nat_ip”: [ [ { “assigned_nat_ip” = “” “nat_ip” = “35.246.120.159” “network_tier” = “PREMIUM” “public_ptr_domain_name” = “” }, ], ]

如何从上述内容中读取该值?

2 回复

假设数组存储在变量 foo 中,foo[0][0]["nat_ip"]

更多关于从二维结构体数组中读取值的Golang实现的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在Go语言中,从这样的二维结构体数组中读取nat_ip值,需要先定义对应的结构体,然后进行JSON解析。以下是实现代码:

package main

import (
    "encoding/json"
    "fmt"
)

// 定义结构体匹配JSON结构
type NatInfo struct {
    AssignedNatIP      string `json:"assigned_nat_ip"`
    NatIP              string `json:"nat_ip"`
    NetworkTier        string `json:"network_tier"`
    PublicPtrDomainName string `json:"public_ptr_domain_name"`
}

func main() {
    // 原始JSON数据
    jsonData := `[
        [
            {
                "assigned_nat_ip": "",
                "nat_ip": "35.246.120.159",
                "network_tier": "PREMIUM",
                "public_ptr_domain_name": ""
            }
        ]
    ]`

    // 解析JSON到二维结构体数组
    var data [][]NatInfo
    err := json.Unmarshal([]byte(jsonData), &data)
    if err != nil {
        panic(err)
    }

    // 读取nat_ip值
    if len(data) > 0 && len(data[0]) > 0 {
        natIP := data[0][0].NatIP
        fmt.Printf("读取到的nat_ip: %s\n", natIP)
    }

    // 如果需要遍历所有元素
    for i, outerArray := range data {
        for j, natInfo := range outerArray {
            fmt.Printf("data[%d][%d].nat_ip = %s\n", i, j, natInfo.NatIP)
        }
    }
}

如果JSON数据来自外部源(如API响应),可以使用以下方式:

func readNatIPFromJSON(jsonStr string) (string, error) {
    var data [][]NatInfo
    err := json.Unmarshal([]byte(jsonStr), &data)
    if err != nil {
        return "", err
    }
    
    if len(data) == 0 || len(data[0]) == 0 {
        return "", fmt.Errorf("no data available")
    }
    
    return data[0][0].NatIP, nil
}

对于更复杂的嵌套结构,可以使用匿名结构体:

func readNatIPWithAnonymousStruct() {
    jsonData := `[[{"nat_ip": "35.246.120.159"}]]`
    
    var data [][]struct {
        NatIP string `json:"nat_ip"`
    }
    
    json.Unmarshal([]byte(jsonData), &data)
    
    if len(data) > 0 && len(data[0]) > 0 {
        fmt.Println(data[0][0].NatIP)
    }
}

运行上述代码将输出:

读取到的nat_ip: 35.246.120.159
data[0][0].nat_ip = 35.246.120.159
回到顶部