일관되지 않은 JSON 필드 처리: 문자열과 배열의 사례
완전히 일관성이 없는 JSON 데이터를 처리할 때 문제가 발생할 수 있습니다. 언마샬링 과정에서. 이는 JSON의 특정 필드의 형식이 다양하여 역마샬링 프로세스에 어려움을 겪을 때 발생할 수 있습니다.
문제:
다음 시나리오를 고려하십시오.
type MyListItem struct { Date string `json:"date"` DisplayName string `json:"display_name"` } type MyListings struct { CLItems []MyListItem `json:"myitems"` }
JSON 데이터에는 문자열일 것으로 예상되는 'display_name'이라는 필드가 있습니다. 그러나 어떤 경우에는 문자열 배열일 수도 있습니다. 이러한 불일치로 인해 역마샬링 프로세스가 복잡해지고 오류가 발생합니다.
해결책:
이 문제를 극복하기 위해 두 가지 기술을 활용할 수 있습니다.
업데이트됨 코드:
type MyListItem struct { Date string `json:"date"` RawDisplayName json.RawMessage `json:"display_name"` DisplayName []string `json:"-"` }
JSON 언마샬링:
최상위 JSON 언마샬링:
var li MyListItem if err := json.Unmarshal(data, &li); err != nil { // handle error }
"DisplayName 추출 " 필드에 따라 유형:
if len(li.RawDisplayName) > 0 { switch li.RawDisplayName[0] { case '"': if err := json.Unmarshal(li.RawDisplayName, &li.DisplayName); err != nil { // handle error } case '[': var s []string if err := json.Unmarshal(li.RawDisplayName, &s); err != nil { // handle error } li.DisplayName = strings.Join(s, "&&") } }
예:
var listings MyListings if err := json.Unmarshal([]byte(data), &listings); err != nil { // handle error } for i := range listings.CLItems { li := &listings.CLItems[i] if len(li.RawDisplayName) > 0 { switch li.RawDisplayName[0] { case '"': if err := json.Unmarshal(li.RawDisplayName, &li.DisplayName); err != nil { // handle error } case '[': var s []string if err := json.Unmarshal(li.RawDisplayName, &s); err != nil { // handle error } li.DisplayName = strings.Join(s, "&&") } } }
이러한 기술을 채택하면 일관성 없는 JSON 필드를 효과적으로 처리하여 애플리케이션에서 적절한 데이터 추출 및 조작을 보장할 수 있습니다. .
위 내용은 일관성 없는 JSON 필드를 처리하는 방법: 문자열과 배열?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!