Dalam senario di mana titik akhir yang digunakan mengembalikan JSON dalam pelbagai format, adalah penting untuk mencari pendekatan yang elegan untuk mengendalikan variasi ini . Dilema timbul kerana sifat tidak boleh ubah titik akhir.
Strategi biasa melibatkan penggunaan berbilang struct untuk penyahkodan, cuba menyahkod ke dalam struct yang mengharapkan rentetan dan bertukar kepada struct ganti dengan tatasusunan apabila menghadapi ralat. Walaupun kaedah ini mencapai kefungsian yang diingini, mungkin terdapat pendekatan yang lebih halus.
Penyelesaian yang disyorkan ialah menyahmarshal JSON ke dalam nilai{} antara muka. Nilai ini kemudiannya boleh diperiksa menggunakan penegasan jenis atau suis jenis untuk menentukan jenis sebenarnya.
Contoh dalam Go menunjukkan keberkesanan pendekatan ini:
<code class="go">type Response struct { Message interface{} `json:"message"` } func main() { inputs := []string{ `{"message":"Message"}`, `{"message":["ERROR_CODE"]}`, } for _, input := range inputs { var r Response if err := json.Unmarshal([]byte(input), &r); err != nil { panic(err) } switch x := r.Message.(type) { case string: fmt.Println("Success, message:", x) case []interface{}: fmt.Println("Error, code:", x) default: fmt.Println("Something else:", x) } } }</code>
Output mempamerkan pengendalian yang berjaya dan perbezaan format respons JSON:
Success, message: Message Error, code: [ERROR_CODE]
Dengan memanfaatkan pendekatan ini, anda boleh mengendalikan format JSON yang berbeza dengan mudah, menghapuskan keperluan untuk berbilang struktur atau pengendalian ralat.
Atas ialah kandungan terperinci Bagaimana Mengendalikan Respons JSON dengan Elegan dengan Format Yang Berbeza-beza?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!