Menyahmarshalling JSON dalam Go Without Double Unmarshaling
Dalam Go, anda mungkin menghadapi situasi di mana anda perlu menghuraikan JSON ke dalam pelbagai struct, tetapi unmarshalling berganda berlaku, membawa kepada redundansi. Artikel ini membentangkan penyelesaian yang melibatkan sebahagian unmarshaling data untuk mengelakkan langkah unmarshaling kedua.
Memahami Isu
Apabila cuba menghuraikan JSON ke dalam struct yang diketahui, perkara biasa pendekatan ialah:
The Penyelesaian
Daripada menghantar nilai ke antara muka{}, seseorang boleh menyahmarshalkannya ke dalam json.RawMessage. Ini sebahagiannya menyahmarshal data dan membenarkan unmarshalling berikutnya kepada struct tertentu berdasarkan nilai utama.
Kod Contoh
import ( "encoding/json" "fmt" ) type Ping struct { Ping string `json:"ping"` } type Ack struct { Messages []Message `json:"messages"` } type Message string func main() { testJSON := []byte(`{"ack":{"messages":["Hi there","Hi again"]}}`) var myAck = Ack{} var myMap map[string]json.RawMessage err := json.Unmarshal(testJSON, &myMap) if err != nil { fmt.Println("error unmarshalling: ", err) } jsonAck, ok := myMap["ack"] if !ok { fmt.Println("key 'ack' not found") return } err = json.Unmarshal(jsonAck, &myAck) if err != nil { fmt.Println("unmarshal error", err) } else { fmt.Println("New ack object: ", myAck) } }
Dalam kod yang diubah suai ini, kami menggantikan peta [rentetan]antara muka{} dengan peta[rentetan]json.RawMessage. Apabila mengendalikan kekunci "ack", kami menyahmarshal terus ke struct Ack, menghapuskan keperluan untuk menyahmarshal berganda.
Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Double Unmarshaling Apabila Menghuraikan JSON dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!