如何使用Go语言正确解析JSON并获取nationality对应字段值
问题原因
- Go的
encoding/json包只能操作结构体首字母大写的导出字段,你代码中Foo.field、Guyy.info都是小写未导出字段,json包无权赋值 - 类型不匹配:JSON串中
info对应的值是数组,你定义Guyy.info为单个Foo结构体,类型不匹配无法解析 - 字段映射不匹配:JSON串中value是小写key,你
Foo.Value没有加json tag,无法正确映射
修复方案
- 所有需要json解析的结构体字段首字母改为大写,通过
json:"xxx"tag和JSON的key做映射 - 将
Guyy.Info的类型改为[]Foo适配数组结构 - 解析完成后遍历
Info数组,匹配Field为nationality的项即可拿到对应值
修改后的完整代码如下:
package main import ( "encoding/json" "fmt" ) type Foo struct { Field string `json:"field"` Value string `json:"value"` } type Guyy struct { Info []Foo `json:"info"` } func main() { GuyJson := `{"info":[{"field":"phone","value":"11111-11111"},{"field":"date","value":"05072001"},{"field":"nationality","value":"american"},{"field":"dni","value":"000012345"}]}` var Guy Guyy // 生产环境请处理此处的错误返回值 err := json.Unmarshal([]byte(GuyJson), &Guy) if err != nil { fmt.Println("解析失败:", err) return } fmt.Printf("%+v\n", Guy) // 提取nationality对应的value var nationalityVal string for _, item := range Guy.Info { if item.Field == "nationality" { nationalityVal = item.Value break } } fmt.Println("nationality对应的value为:", nationalityVal) }
运行输出结果:
{Info:[{Field:phone Value:11111-11111} {Field:date Value:05072001} {Field:nationality Value:american} {Field:dni Value:000012345}]} nationality对应的value为: american
内容的提问来源于stack exchange,提问作者NexDanger
相关产品推荐
相关产品推荐

