Go에서 JSON을 맵으로 부분적으로 비정렬화
문제:
다음 시나리오를 고려해보세요. Go 서버는 키/값 쌍이 있는 객체 내에 캡슐화된 JSON 데이터를 받습니다. 각 키는 특정 유형의 값에 해당하며 서버는 키에 따라 해당 값을 적절한 구조체 유형으로 역마샬링해야 합니다. 문제는 "encoding/json" 패키지를 사용하여 이를 달성할 수 있느냐는 것입니다.
해결책:
이를 달성하려면 JSON 데이터를 부분적으로 역마샬링하여 키-값 쌍의 맵. 여기서 키는 문자열이고 값은 json.RawMessage 인스턴스입니다. RawMessage는 처리되지 않은 JSON 데이터를 나타내므로 이를 특정 구조체나 유형으로 추가로 역마샬링할 수 있습니다.
보여줄 코드는 다음과 같습니다.
import ( "encoding/json" "fmt" ) func main() { data := []byte(`{"sendMsg":{"user":"ANisus","msg":"Trying to send a message"},"say":"Hello"}`) var objmap map[string]json.RawMessage err := json.Unmarshal(data, &objmap) if err != nil { // Handle error } // Example: Unmarshal sendMsg value into a struct type sendMsg struct { User string Msg string } var s sendMsg err = json.Unmarshal(objmap["sendMsg"], &s) if err != nil { // Handle error } fmt.Println(s) }
사용 예:
위의 예에서 JSON 데이터는 먼저 정렬 해제되어 지도[문자열]json.RawMessage. 그런 다음 sendMsg와 같은 특정 값을 구문 분석하기 위해 해당 RawMessage를 프로그램에 정의된 구조체로 추가로 역마샬링할 수 있습니다.
이 기술을 사용하면 여러 키-값 쌍이 있는 JSON 데이터를 유연하고 효율적으로 처리할 수 있습니다. 값은 키에 따라 다른 유형으로 역마샬링될 수 있습니다.
위 내용은 Go의 `encoding/json` 패키지가 JSON을 맵으로 부분적으로 비정렬화할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!