Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menyahkod Data JSON yang Mengandungi Rentetan Berkod JSON?

Bagaimana untuk Menyahkod Data JSON yang Mengandungi Rentetan Berkod JSON?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-03 09:46:11896semak imbas

How to Decode JSON Data Containing JSON-Encoded Strings?

Menyahkod JSON Termasuk Rentetan Dikodkan JSON

Apabila menerima data JSON daripada sumber luaran, adalah perkara biasa untuk menemui JSON yang termasuk rentetan JSON yang dikodkan. Mengendalikan senario ini memerlukan proses penyahkodan dua langkah.

Pertimbangkan JSON berikut:

{"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}}"]}

Untuk menyahkod ini dengan betul, kami mentakrifkan struktur berikut:

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"`
}

Langkah pertama ialah menyahkod lapisan paling luar:

var m main
if err := json.Unmarshal([]byte(str), &amp;m); err != nil {
    log.Fatal(err)
}

Seterusnya, kita menyahkod rentetan berkod JSON dalam tatasusunan "args":

var args arg
if err := json.Unmarshal([]byte(m.Args[0]), &amp;args); err != nil {
    log.Fatal(err)
}

Menggunakan pendekatan dua langkah ini memastikan aplikasi menghuraikan kedua-dua JSON paling luar dan rentetan JSON terbenam dengan betul.

Atas ialah kandungan terperinci Bagaimana untuk Menyahkod Data JSON yang Mengandungi Rentetan Berkod JSON?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn