특정 시나리오에서는 부분 또는 섹션에서 JSON 데이터를 언마샬링해야 할 수도 있습니다. 예를 들어, 데이터의 위쪽 절반은 아래쪽 절반에서 수행할 작업을 나타낼 수 있습니다(예: 위쪽 절반의 "코드"를 기반으로 특정 구조체로 역마샬링).
다음 샘플 구조를 고려하세요.
<code class="go">type Range struct { Start int End int } type User struct { ID int Pass int }</code>
예를 들어 JSON 데이터는 다음과 유사할 수 있습니다.
<code class="json">// Message with "Code" 4, signifying a Range structure { "Code": 4, "Payload": { "Start": 1, "End": 10 } } // Message with "Code" 3, signifying a User structure { "Code": 3, "Payload": { "ID": 1, "Pass": 1234 } }</code>
이러한 역정렬화를 달성하려면 다음과 같은 결정이 나올 때까지 JSON 데이터의 아래쪽 절반에 대한 구문 분석을 지연할 수 있습니다. 위쪽 절반에 있는 코드입니다. 다음 접근 방식을 고려하세요.
<code class="go">import ( "encoding/json" "fmt" ) type Message struct { Code int Payload json.RawMessage // Delay parsing until we know the code } func MyUnmarshall(m []byte) { var message Message var payload interface{} json.Unmarshal(m, &message) // Delay parsing until we know the color space switch message.Code { case 3: payload = new(User) case 4: payload = new(Range) } json.Unmarshal(message.Payload, payload) // Error checks omitted for readability fmt.Printf("\n%v%+v", message.Code, payload) // Perform actions on the data } 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>
이 접근 방식을 사용하면 지정된 코드에 따라 섹션의 임의 JSON 데이터를 효과적으로 역마샬링할 수 있습니다.
위 내용은 코드를 기반으로 섹션에서 임의의 JSON 데이터를 정렬 해제하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!