임의 데이터 비정렬화
많은 시나리오에서 비정렬화 프로세스가 다양한 상황에 적응할 수 있도록 유연한 방식으로 JSON 데이터를 비정렬화해야 합니다. 미리 결정된 코드 값을 기반으로 한 데이터 구조. 이를 통해 다양한 소스에서 수신된 데이터를 동적으로 해석할 수 있습니다.
예를 들어, "페이로드" 필드에 포함된 데이터 유형을 지정하는 "코드" 필드가 포함된 JSON 메시지를 생각해 보세요. "페이로드" 필드는 "코드" 값에 따라 다른 데이터 구조를 나타낼 수 있습니다.
이를 달성하기 위해 다음 기술을 사용할 수 있습니다.
<code class="go">package main import ( "encoding/json" "fmt" ) type Message struct { Code int Payload json.RawMessage // delay parsing until we know the code } // Define the possible data structures that can be unmarshalled from the "payload" field type Range struct { Start int End int } type User struct { ID int Pass int } // Custom unmarshalling function func MyUnmarshall(m []byte) { var message Message var payload interface{} json.Unmarshal(m, &message) // delay parsing until we know the color space // Determine the data structure based on the "code" field switch message.Code { case 3: payload = new(User) case 4: payload = new(Range) } // Unmarshall the "payload" field into the appropriate data structure json.Unmarshal(message.Payload, payload) //err check ommited for readability // Do something with the unmarshalled data fmt.Printf("\n%v%+v", message.Code, payload) } func main() { json := []byte(`{"Code": 4, "Payload": {"Start": 1, "End": 10}}`) MyUnmarshall(json) json = []byte(`{"Code": 3, "Payload": {"ID": 1, "Pass": 1234}}`) MyUnmarshall(json) }</code>
이 예에서 MyUnmarshall 함수는 JSON 메시지를 수신하고 "코드" 및 "페이로드" 필드를 메시지 구조체에 저장한 다음 "코드" 값을 기반으로 데이터 구조 인스턴스를 동적으로 생성합니다. 이후 "페이로드" 필드를 적절한 구조로 역마샬링하고 역마샬링된 데이터에 대해 원하는 작업을 수행합니다.
위 내용은 코드 값을 기반으로 JSON 데이터를 동적으로 역정렬화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!