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

如何在Go语言中解析包含未知字段和键的JSON数据

问题原因及解决方法

你的代码返回空map的核心原因是结构体字段未导出:Go语言中,只有首字母大写的字段才能被标准库的json包访问和赋值。你定义的test结构体里的p字段是小写,导致json.Unmarshal无法对其进行赋值,所以始终是空map。

修正后的代码

package main

import (
    "encoding/json"
    "fmt"
)

type test struct {
    Properties map[string]string `json:"properties"` // 首字母大写,导出字段
}

func main() {
    var t test

    body := `
    {
        "properties":{"unknown key": "unknown value","unknown key2": "unknown value 2"}
    }
    `

    // 增加错误检查,便于排查问题
    err := json.Unmarshal([]byte(body), &t)
    if err != nil {
        fmt.Printf("解析失败: %v\n", err)
        return
    }

    fmt.Println(t.Properties)
}

额外说明

  • 字段命名:建议使用更具语义的字段名(比如Properties),提升代码可读性,同时保持首字母大写以确保导出。
  • 值类型兼容:如果properties中的值可能包含字符串以外的类型(如数字、布尔值),可将字段类型改为map[string]interface{},兼容任意类型的值:
    type test struct {
        Properties map[string]interface{} `json:"properties"`
    }
    
  • 错误处理:始终检查json.Unmarshal的返回错误,能快速定位解析过程中的问题(如JSON格式错误、字段类型不匹配等)。

内容的提问来源于stack exchange,提问作者Vlad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 11:20:53