go - 如何忽略 go 中的根 JSON 元素?

标签 go

我想用 map["Name"] == "Value"将以下 JSON 序列化为 map[string]string

{
    "Item": {
        "tags": {
            "Name": "Value"
        }
    }
}

但是,我不想为“项目”创建一个只有一个字段的支柱。是否可以忽略类似于 Java/Jackson 的 go 中的根 JSON 元素:mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);

到目前为止我最好的是:

items := make(map[string]map[string]string)
items := items["Item"]

最佳答案

我会做一个小 helper ,它会跳过以下几行结构的根:

func SkipRoot(jsonBlob []byte) json.RawMessage {
    var root map[string]json.RawMessage

    if err := json.Unmarshal(jsonBlob, &root); err != nil {
        panic(err)
    }
    for _, v := range root {
        return v
    }
    return nil
}

然后像这样使用它:

json.Unmarshal(SkipRoot(jsonBlob), &items)

完整示例在这里:Playground

关于go - 如何忽略 go 中的根 JSON 元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20872528/

相关文章:

由于 : "go directory outside available modules",Docker 构建失败

github - golang 中非原子类型的类型包装

go - 不需要的 Glide 导入

go - 处理多个错误

go - 为什么我们在构建 go 应用程序之前使用 go mod 下载?

sql - 单值上下文中的多值 .Exec() 与 Golang sql

methods - T 和 *T 的方法集

go - Go中的 slice 分块

c# - 如何在 C# 中解密用 GO 语言加密的 RSA 加密字符串。解码 OAEP 填充时出错

process - 检查进程是否存在于 go way