YAML 형식의 동적 데이터로 작업할 때 추가 처리를 위해 JSON으로 변환해야 하는 경우가 많습니다. 그러나 YAML을 빈 인터페이스로 직접 역마샬링하면{} 주어진 시나리오에서 볼 수 있듯이 map[인터페이스{}]인터페이스{} 유형을 만날 때 문제가 발생할 수 있습니다.
이 문제를 해결하기 위해 변환()이라는 재귀 함수가 사용됩니다. 이 함수는 인터페이스{} 값을 반복하고 다음 변환을 수행합니다.
이렇게 하면 출력되는 값은 JSON 문자열로 안전하게 마샬링될 수 있습니다.
다음은 변환() 함수를 사용하는 방법에 대한 예입니다.
import ( "fmt" "log" "github.com/go-yaml/yaml" "encoding/json" ) 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 } func main() { // Define the YAML string const s = `Services: - Orders: - ID: $save ID1 SupplierOrderCode: $SupplierOrderCode - ID: $save ID2 SupplierOrderCode: 111111 ` // Unmarshal the YAML string into an empty interface var body interface{} if err := yaml.Unmarshal([]byte(s), &body); err != nil { log.Fatal(err) } // Recursively convert the interface to a map[string]interface{} body = convert(body) // Marshal the converted interface into a JSON string if b, err := json.Marshal(body); err != nil { log.Fatal(err) } else { fmt.Println("Converted JSON:", string(b)) } }
프로그램의 출력은 변환된 것입니다. JSON:
Converted JSON: {"Services":[{"Orders":[ {"ID":"$save ID1","SupplierOrderCode":"$SupplierOrderCode"}, {"ID":"$save ID2","SupplierOrderCode":111111}]}]}
위 내용은 데이터 무결성을 잃지 않고 Go에서 YAML을 JSON으로 안전하게 변환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!