>  기사  >  백엔드 개발  >  코드를 기반으로 섹션에서 임의의 JSON 데이터를 정렬 해제하는 방법은 무엇입니까?

코드를 기반으로 섹션에서 임의의 JSON 데이터를 정렬 해제하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-31 21:27:02998검색

How to Unmarshall Arbitrary JSON Data in Sections Based on a Code?

JSON에서 임의 데이터 언마샬링

특정 시나리오에서는 부분 또는 섹션에서 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.