YAML-zu-JSON-Konvertierung für dynamische Daten ohne Strukturen
Beim Umgang mit dynamischen Daten, die nicht einer Struktur zugeordnet werden können, Konvertierung von YAML in JSON kann Herausforderungen mit sich bringen. Betrachten Sie die folgende YAML-Zeichenfolge:
Services: - Orders: - ID: $save ID1 SupplierOrderCode: $SupplierOrderCode - ID: $save ID2 SupplierOrderCode: 111111
Um diese YAML-Zeichenfolge in JSON zu konvertieren, besteht ein Ansatz darin, sie in einen Interface{}-Typ zu entmarshalieren. Dies führt jedoch zu nicht unterstützten Typen, da der Standardtyp, der zum Entmarshalieren von Schlüssel-Wert-Paaren verwendet wird, „map[interface{}]interface{}“ ist.
Um dieses Problem zu lösen, müssen wir „map[interface{“ konvertieren. }]interface{}-Werte, um [string]interface{}-Werte rekursiv abzubilden. Hier ist eine Funktion, die diese Konvertierung durchführt:
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 }
Mit dieser Funktion können wir den YAML-String wie folgt in JSON konvertieren:
import ( "encoding/json" "fmt" "github.com/go-yaml/yaml" ) const s = `Services: - Orders: - ID: $save ID1 SupplierOrderCode: $SupplierOrderCode - ID: $save ID2 SupplierOrderCode: 111111 ` func main() { fmt.Printf("Input: %s\n", s) 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) } }
Ausgabe:
Input: Services: - Orders: - ID: $save ID1 SupplierOrderCode: $SupplierOrderCode - ID: $save ID2 SupplierOrderCode: 111111 Output: {"Services":[{"Orders":[ {"ID":"$save ID1","SupplierOrderCode":"$SupplierOrderCode"}, {"ID":"$save ID2","SupplierOrderCode":111111}]}]}
Das obige ist der detaillierte Inhalt vonWie konvertiert man YAML effizient in JSON mit dynamischen Daten und ohne Strukturen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!