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

使用Golang解析含特殊键的JSON结果为空,如何获取目标值?

解决Go解析嵌套JSON字段为空的问题

你的解析结果为空主要有两个原因:

  1. 外层JSON的根字段是"x",但你的结构体里没有对应这个字段
  2. 结构体中Foo的类型和JSON结构不匹配,"l.a"是"x"对象下的直接字段,并非嵌套map结构

方案一:用结构体精准解析

直接定义匹配JSON结构的结构体,对齐嵌套层级与字段标签:

package main

import (
    "encoding/json"
    "fmt"
)

type Object struct {
    X struct {
        LA string `json:"l.a"` // 用LA作为Go字段名,标签对应JSON里的"l.a"
    } `json:"x"` // 对应外层的"x"字段
}

func main() {
    body := []byte(`{"x":{"l.a":"test"}}`)
    var obj Object
    err := json.Unmarshal(body, &obj)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println("test值为:", obj.X.LA) // 输出 test值为: test
}

方案二:用嵌套map解析

如果不想定义结构体,可直接用两层map解析:

package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    body := []byte(`{"x":{"l.a":"test"}}`)
    var data map[string]map[string]string
    err := json.Unmarshal(body, &data)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println("test值为:", data["x"]["l.a"]) // 输出 test值为: test
}

方案三:用map[string]interface{}通用解析

若JSON结构不确定,可使用通用类型解析后做类型断言:

package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    body := []byte(`{"x":{"l.a":"test"}}`)
    var data map[string]interface{}
    err := json.Unmarshal(body, &data)
    if err != nil {
        fmt.Println(err)
        return
    }
    xObj := data["x"].(map[string]interface{})
    fmt.Println("test值为:", xObj["l.a"]) // 输出 test值为: test
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 06:51:18