알려진 구조 없이 중첩된 JSON 역마샬링
정의된 구조 없이 중첩된 JSON 데이터가 있는 경우 역마샬링 문제를 완화할 수 있는 여러 가지 접근 방식이 있습니다.
반복적인 비정렬화 방지
일반적으로 비정렬화 작업을 최소화하는 것이 좋습니다. 나중에 사용할 수 있도록 비정렬화된 개체를 저장하고 반복적인 비정렬화를 방지하려면 캐싱 메커니즘을 구현하는 것이 좋습니다. 그러나 어떤 경우에는 다중 역마샬링이 필요할 수 있으며, 특히 다양한 유형의 중첩 구조를 처리할 때 더욱 그렇습니다.
비정렬화를 위한 올바른 구조체 결정
방법 1: map[string]인터페이스로 비정렬화{}
json.RawMessage를 map[string]인터페이스{}로 비정렬화합니다. 이를 통해 중첩된 구조를 검사하여 유형을 식별한 다음 정렬 해제할 올바른 구조체를 찾을 수 있습니다.
예:
<code class="go">var objMap map[string]interface{} json.Unmarshal(rawMessage, &objMap)</code>
방법 2 : 정규식 일치
정규식을 사용하여 JSON 데이터 내의 유형 문자열을 일치시킵니다. 유형이 알려지면 리플렉션이나 유형 스위치를 사용하여 해당 구조체로 역정렬화합니다.
예:
<code class="go">type Regex *regexp.Regexp // Split the JSON data into key-value pairs type KeyValue struct { Key string Value string } // Regex for extracting the type var typeRE = Regex(regexp.MustCompile(`(?m)^.*"type": "(.+)".*$`)) // Unmarshal the raw message and extract the type func getType(rawMessage []byte) (string, error) { var data KeyValue err := json.Unmarshal(rawMessage, &data) if err != nil { return "", err } matches := typeRE.FindStringSubmatch(data.Value) return matches[1], nil }</code>
Copy 또는 Regular 사용 표현식 접근법
방법 A: 복사 및 비정렬화
방법 B: 정규 표현식 및 역마샬링
위 내용은 구조를 모르고 중첩된 JSON 데이터를 어떻게 역마샬링할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!