Go에서 JSON 데이터를 맵으로 구문 분석
Websocket 서버는 종종 값 유형을 나타내는 키-값 쌍으로 래핑된 JSON 데이터를 수신합니다. . "encoding/json" 패키지는 편리한 역마샬링 기능을 제공하지만 추가 처리를 위해 JSON 데이터를 부분적으로 맵으로 구문 분석해야 합니다.
map[string]json.RawMessage를 사용하는 접근 방식
부분적 언마샬링을 달성하려면 map[string]json.RawMessage를 활용할 수 있습니다. 이 접근 방식을 사용하면 JSON 데이터를 맵으로 역마샬링할 수 있으며, 키는 속성 이름이고 값은 구문 분석되지 않은 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 { fmt.Printf("Error unmarshaling JSON: %v", err) return } // Unpack Individual Values // Parsing sendMsg var s sendMsg err = json.Unmarshal(objmap["sendMsg"], &s) if err != nil { fmt.Printf("Error unmarshaling 'sendMsg': %v", err) return } fmt.Println("sendMsg:", s) // Parsing say var str string err = json.Unmarshal(objmap["say"], &str) if err != nil { fmt.Printf("Error unmarshaling 'say': %v", err) return } fmt.Println("say:", str) } type sendMsg struct { User string Msg string }
이 접근 방식에서 objmap에는 "sendMsg" 키가 포함됩니다. "를 sendMsg 개체를 나타내는 원시 JSON 데이터인 값으로 바꿉니다. 이 데이터를 sendMsg 구조체로 추가로 언마샬링하면 개별 필드(User 및 Msg)에 액세스할 수 있습니다.
참고: 성공적으로 언마샬링하려면 sendMsg 구조체의 필드를 내보내는 것을 잊지 마세요. (예: 사용자 및 메시지).
위 내용은 Go에서 JSON 맵을 부분적으로 효율적으로 구문 분석하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!