Saya mempunyai data dalam bentukmap[string][]byte
, di mana kunci ialah tag medan json bagi struktur dan nilai ialah kepingan bait.
Pertimbangkan contoh ini:
type Tweet struct { UserId int `json:"user_id"` Message string `json:"message"` }
data = { "user_id":, "message": }
var t Tweet
Bagaimana untuk menyahmarshal data medan yang sepadan ke dalam struktur Tweet, yang boleh mengandungi sebarang jenis medan, iaitu slice/peta/jenis tersuai/jenis penunjuk? Adakah saya perlu memetakan data setiap medan secara individu satu demi satu atau adakah terdapat cara umum?
Saya cuba menyusun keseluruhan data dan menyahmarshalingnya kembali menjadi jenis struct, tetapi nampaknya ia mengubah suai data sebenar secara dalaman dan tidak berfungsi.
bytes, err := json.Marshal(data) var t Tweet err = json.Unmarshal(bytes,&t)
Saya rasa anda tidak menyebut kesilapan anda tetapi perkara berikut berkesan untuk saya. Anda boleh mencuba ini.
package main import ( "encoding/json" "fmt" ) type Tweet struct { UserId int `json:"user_id"` Message string `json:"message"` } func main() { // Example data: map of field tags to JSON-encoded byte slices data := map[string]json.RawMessage{ "user_id": []byte(`123`), // Encoded as a JSON number "message": []byte(`"Hello, world!"`), // Encoded as a JSON string } // Convert map to JSON jsonData, err := json.Marshal(data) if err != nil { fmt.Println("Error marshalling map to JSON:", err) return } // Unmarshal JSON into Tweet struct var t Tweet if err := json.Unmarshal(jsonData, &t); err != nil { fmt.Println("Error unmarshalling JSON:", err) return } // Output the result fmt.Printf("Unmarshalled: %+v\n", t) // Marshal the Tweet struct back into JSON marshalledData, err := json.Marshal(t) if err != nil { fmt.Println("Error marshalling Tweet struct to JSON:", err) return } // Output the marshalled JSON fmt.Printf("Marshalled: %s\n", marshalledData) }
Atas ialah kandungan terperinci Unmarshal bait data separa ke dalam struktur tersuai. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!