Menukar YAML kepada JSON tanpa Struktur Data Pratakrif
Soalan:
Bagaimana anda menukar rentetan YAML dengan struktur dinamik ke dalam rentetan JSON? Menyahmarshaling ke dalam antara muka{} menghasilkan jenis data yang tidak disokong (peta[antara muka {}]antara muka {}).
Jawapan:
Cabaran terletak pada yang tidak dijangka kedalaman peta bersarang dan kepingan apabila menyahmarshaling YAML ke dalam antara muka generik{}. Berikut ialah pendekatan untuk menukarnya secara rekursif kepada[rentetan] antara muka{} dan []antara muka{}:
func convert(i interface{}) interface{} { switch x := i.(type) { case map[interface{}]interface{}: m2 := map[string]interface{}{} for k, v := range x { m2[k.(string)] = convert(v) } return m2 case []interface{}: for i, v := range x { x[i] = convert(v) } } return i }
Contoh penggunaan:
var body interface{} if err := yaml.Unmarshal([]byte(s), &body); err != nil { panic(err) } body = convert(body) if b, err := json.Marshal(body); err != nil { panic(err) } else { fmt.Printf("Output: %s\n", b) }
Output:
{"Services":[{"Orders":[ {"ID":"$save ID1","SupplierOrderCode":"$SupplierOrderCode"}, {"ID":"$save ID2","SupplierOrderCode":111111}]}]}
Nota: Proses penukaran ini mungkin mengakibatkan kehilangan susunan elemen, seperti yang dipetakan oleh Go tidak dipesan.
Atas ialah kandungan terperinci Bagaimana untuk Menukar Rentetan YAML Dinamik kepada JSON dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!