ホームページ > バックエンド開発 > Golang > JSON エンコードされた文字列を含む JSON データをデコードするにはどうすればよいですか?

JSON エンコードされた文字列を含む JSON データをデコードするにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-03 09:46:11
オリジナル
818 人が閲覧しました

How to Decode JSON Data Containing JSON-Encoded Strings?

JSON エンコードされた文字列を含む JSON のデコード

外部ソースから JSON データを受信する場合、エンコードされた JSON 文字列を含む JSON が発生するのが一般的です。このシナリオを処理するには、2 段階のデコード プロセスが必要です。

次の JSON について考えます。

{"name":"message","args":["{\"method\":\"chatMsg\",\"params\":{\"channel\":\"channel\",\"name\":\"name\",\"nameColor\":\"B5B11E\",\"text\":\"<a href=\"https://play.spotify.com/browse\" target=\"_blank\">https://play.spotify.com/browse</a>\",\"time\":1455397119}}"]}
ログイン後にコピー

これを適切にデコードするには、次の構造を定義します。

type main struct {
  Name string   `json:"name"`
  Args []string `json:"args"`
}

type arg struct {
  Method string `json:"method"`
  Params par    `json:"params"`
}
type par struct {
  Channel   string `json:"channel,omitempty"`
  Name      string `json:"name,omitempty"`
  NameColor string `json:"nameColor,omitempty"`
  Text      string `json:"text,omitempty"`
  Time      int64  `json:"time,omitempty"`
}
ログイン後にコピー

最初のステップは、最も外側のレイヤーをデコードすることです:

var m main
if err := json.Unmarshal([]byte(str), &amp;m); err != nil {
    log.Fatal(err)
}
ログイン後にコピー

次に、 「args」配列内の JSON エンコードされた文字列:

var args arg
if err := json.Unmarshal([]byte(m.Args[0]), &amp;args); err != nil {
    log.Fatal(err)
}
ログイン後にコピー

この 2 段階のアプローチを使用すると、アプリケーションは最も外側の JSON 文字列と埋め込まれた JSON 文字列の両方を正しく解析できます。

以上がJSON エンコードされた文字列を含む JSON データをデコードするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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