从二维结构体数组中读取值的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

