You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Go语言正确解析JSON并获取nationality对应字段值

问题原因

  • Go的encoding/json包只能操作结构体首字母大写的导出字段,你代码中Foo.field、Guyy.info都是小写未导出字段,json包无权赋值
  • 类型不匹配:JSON串中info对应的值是数组,你定义Guyy.info为单个Foo结构体,类型不匹配无法解析
  • 字段映射不匹配:JSON串中value是小写key,你Foo.Value没有加json tag,无法正确映射

修复方案

  1. 所有需要json解析的结构体字段首字母改为大写,通过json:"xxx"tag和JSON的key做映射
  2. 将Guyy.Info的类型改为[]Foo适配数组结构
  3. 解析完成后遍历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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 03:30:05