중첩 및 구조적 유사성을 사용하여 JSON 역마샬링
복잡한 JSON 구조를 다룰 때 구조체의 한 요소가 구조체 자체와 동일한 유형입니다. 이로 인해 언마샬링 프로세스 중에 문제가 발생할 수 있습니다.
이 특정 사례에서는 데이터베이스 구성 배열을 나타내는 JSON 문자열이 제공됩니다. 각 데이터베이스 구성에는 복제본 목록을 포함한 다양한 속성이 포함되어 있습니다. 각 복제본은 데이터베이스 구성과 유사한 속성을 가진 JSON 개체이기도 합니다.
이 JSON 문자열을 역마샬링하려면 중첩 및 구조적 유사성을 수용할 수 있는 데이터 구조가 필요합니다.
동적 유형으로 중첩 구조 모델링
JSON 입력은 DBS 구조체의 일부가 아니기 때문에 다음이 필요합니다. 구조를 캡처하기 위한 보다 유연한 데이터 유형입니다. map[string]인터페이스{}는 동적 값으로 키-값 쌍을 나타낼 수 있기 때문에 탁월한 옵션입니다.
예:
type DBS struct { URL string Port string Uname string Pass string Authdb string Replicas []DBS } func main() { raw, err := ioutil.ReadFile("./config.json") if err != nil { fmt.Println(err.Error()) os.Exit(1) } var config []map[string]interface{} json.Unmarshal(raw, &config) for _, db := range config { d, ok := db["db"] if !ok { // Handle the case where "db" is missing } db := d.(map[string]interface{}) url := db["url"].(string) port := db["port"].(string) var replicas []DBS for _, replica := range db["replicas"] { replicas = append(replicas, mapToDBS(replica)) } // ... Other operations } }
동적 유형을 사용하여 JSON
이 예에서 config 변수는 데이터베이스 구성을 키-값 쌍으로 보유할 수 있는 맵의 조각입니다.
각 데이터베이스 구성에 대해 "db" 하위 객체를 선택하고 이를 map[string]인터페이스{}로 캐스팅합니다. 이를 통해 "url" 및 "port"와 같은 개별 속성에 액세스할 수 있습니다.
"replicas" 속성도 유사하게 처리됩니다. . 각 복제본은 JSON 개체이므로 mapToDBS() 함수를 사용하여 DBS 구조체로 변환할 수 있습니다.
동적 유형의 유연성을 활용하여 효과적으로 JSON 문자열을 역마샬링하고 중첩된 구조를 구문 분석할 수 있습니다.위 내용은 Go에서 구조적으로 유사한 요소를 사용하여 중첩된 JSON을 역마샬링하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!