首页 > 后端开发 > Golang > 如何在 Go 中解组字符串字段中的嵌套 JSON?

如何在 Go 中解组字符串字段中的嵌套 JSON?

Patricia Arquette
发布: 2024-11-26 13:43:17
原创
215 人浏览过

How to Unmarshal Nested JSON within a String Field in Go?

无法将字符串解组到 Go 结构字段

在尝试反序列化 Docker API 响应时,出现错误“json: 无法将字符串解组到 Go 中”结构字段 .v1Compatibility”发生。 JSON 结构将 v1Compatibility 字段定义为字符串,但实际响应在该字段中包含 JSON 字符串。

要解决此问题,需要采用两遍解组方法:

  1. 在 Go 结构体中定义一个新字段 V1CompatibilityRaw 来捕获原始字符串值。
  2. 解组原始 JSON 字符串转换为单独的 V1Compatibility 结构。

这是修改后的 Go 结构:

type ManifestResponse struct {
    Name         string `json:"name"`
    Tag          string `json:"tag"`
    Architecture string `json:"architecture"`

    FsLayers []struct {
        BlobSum string `json:"blobSum"`
    } `json:"fsLayers"`

    History []struct {
        V1CompatibilityRaw string `json:"v1Compatibility"`
        V1Compatibility V1Compatibility
    } `json:"history"`
}

type V1Compatibility struct {
    ID              string `json:"id"`
    Parent          string `json:"parent"`
    Created         string `json:"created"`
}
登录后复制

解组原始 JSON 字符串后,可以使用解析的数据更新 V1Compatibility 字段:

for i := range jsonManResp.History {
    var comp V1Compatibility
    if err := json.Unmarshal([]byte(jsonManResp.History[i].V1CompatibilityRaw), &comp); err != nil {
        log.Fatal(err)
    }
    jsonManResp.History[i].V1Compatibility = comp
}
登录后复制

这种两遍方法有效地处理了字符串字段的情况JSON 响应中包含嵌套的 JSON 内容。

以上是如何在 Go 中解组字符串字段中的嵌套 JSON?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板