Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mengendalikan Rentetan Dikodkan Bersarang dalam Data Websocket JSON?

Bagaimana untuk Mengendalikan Rentetan Dikodkan Bersarang dalam Data Websocket JSON?

Patricia Arquette
Patricia Arquetteasal
2024-12-05 01:54:08537semak imbas

How to Handle Nested Encoded Strings in JSON Websocket Data?

Menyahkod JSON dengan Rentetan Dikodkan Bersarang

Masalah:

Apabila menghuraikan data soket web dalam format JSON, pengguna mungkin menghadapi ralat disebabkan oleh rentetan JSON yang dikodkan bersarang yang melanggar sintaks JSON. Sebagai contoh, nilai rentetan medan "teks" mungkin mengandungi entiti HTML seperti "" dan "<", menyebabkan penyahkod gagal.

Penyelesaian:

Untuk mengendalikan rentetan dikodkan bersarang dalam JSON, aplikasi mesti menyahkod data dalam dua langkah:

  1. Laluan pertama: Nyahkod lapisan JSON luar menggunakan struct asas, yang mengabaikan rentetan dikodkan bersarang dan menganggapnya sebagai teks biasa.
  2. Pas kedua: Selepas memperoleh data lapisan luar, nyahkod rentetan JSON bersarang dalam "args" medan.

Berikut ialah contoh coretan kod yang menunjukkan pendekatan ini:

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

// Input JSON string
str := `{"name":"message","args":["{\"method\":\"chatMsg\",\"params\":{\"channel\":\"channel\",\"name\":\"name\",\"nameColor\":\"B5B11E\",\"text\":\"https://play.spotify.com/browse\",\"time\":1455397119}}"]}`

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

Dalam contoh ini, hantaran pertama dilakukan dengan menyahkod rentetan JSON luar ke dalam struct utama, yang mengandungi medan "nama" dan "args". Medan "args" kemudiannya dihuraikan sebagai rentetan JSON yang berasingan dalam laluan kedua, mengalih keluar entiti HTML dan memulihkannya kepada objek arg yang sah. Pendekatan ini memastikan semua data JSON diproses dengan betul dan ralat dielakkan.

Atas ialah kandungan terperinci Bagaimana untuk Mengendalikan Rentetan Dikodkan Bersarang dalam Data Websocket 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