json字符串里的空key,go的结构体要怎么写?

1. 运行环境

go version go1.19 linux/amd64

2. 问题描述?

{"":{"content":"....."}}
例如上面一串json

    type Json struct {
        Data struct {
            Content string `json:"content"`
        } `json:""`
    }

    jsonStr := "{\"\":{\"content\":\".....\"}}"

    var extend Json
    json.Unmarshal([]byte(jsonStr), &extend)
    println(extend.Data.Content)

3. 您期望得到的结果?

输出结果为content里的内容

4. 您实际得到的结果?

输出结果为空

最佳答案

在go中,空字符串类型的变量初始值就是空字符串,你的写法会被go认为是未设置json别名

如果你只是想兼容第三方,可以用map做中间数据转换一下,类似这样:


    type Data struct {
        Content string `json:"content"`
    }
    type Json struct {
        Data Data
    }

    m := make(map[string]Data)

    jsonStr := "{\"\":{\"content\":\".....\"}}"

    var extend Json
    err := json.Unmarshal([]byte(jsonStr), &m)
    if err != nil {
        panic(err)
    }
    extend.Data = m[""]
    fmt.Println(extend)
1年前 评论
讨论数量: 3

key为空是不标准的json,json要怎么解也解不出来,只能自己处理

1年前 评论

有趣的问题,或许可以实现UnmarshalJSON接口自己处理?蹲一个更好的方法

1年前 评论

在go中,空字符串类型的变量初始值就是空字符串,你的写法会被go认为是未设置json别名

如果你只是想兼容第三方,可以用map做中间数据转换一下,类似这样:


    type Data struct {
        Content string `json:"content"`
    }
    type Json struct {
        Data Data
    }

    m := make(map[string]Data)

    jsonStr := "{\"\":{\"content\":\".....\"}}"

    var extend Json
    err := json.Unmarshal([]byte(jsonStr), &m)
    if err != nil {
        panic(err)
    }
    extend.Data = m[""]
    fmt.Println(extend)
1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!