ホームページ > バックエンド開発 > Golang > Go の文字列フィールド内でネストされた JSON をアンマーシャリングするにはどうすればよいですか?

Go の文字列フィールド内でネストされた JSON をアンマーシャリングするにはどうすればよいですか?

Patricia Arquette
リリース: 2024-11-26 13:43:17
オリジナル
218 人が閲覧しました

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

文字列を Go 構造体フィールドにアンマーシャルできません

Docker API 応答を逆シリアル化しようとすると、エラー「json: 文字列を Go にアンマーシャルできません」構造体フィールド.v1Compatibility」が発生します。 JSON 構造では v1Compatibility フィールドが文字列として定義されていますが、実際の応答にはそのフィールド内に JSON 文字列が含まれています。

この問題を解決するには、2 パスのアンマーシャリング アプローチが必要です。

  1. 生の文字列をキャプチャするために Go 構造体に新しいフィールド V1CompatibilityRaw を定義しますvalue.
  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 フィールドは解析されたもので更新できます。 data:

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
}
ログイン後にコピー

この 2 パスのアプローチは、JSON 応答の文字列フィールドにネストされた JSON コンテンツが含まれる状況を効果的に処理します。

以上がGo の文字列フィールド内でネストされた JSON をアンマーシャリングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート