> 백엔드 개발 > Golang > 일관성 없는 JSON 필드를 처리하는 방법: 문자열과 배열?

일관성 없는 JSON 필드를 처리하는 방법: 문자열과 배열?

Barbara Streisand
풀어 주다: 2024-12-05 03:51:13
원래의
217명이 탐색했습니다.

How to Handle Inconsistent JSON Fields: Strings vs. Arrays?

일관되지 않은 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'이라는 필드가 있습니다. 그러나 어떤 경우에는 문자열 배열일 수도 있습니다. 이러한 불일치로 인해 역마샬링 프로세스가 복잡해지고 오류가 발생합니다.

해결책:

이 문제를 극복하기 위해 두 가지 기술을 활용할 수 있습니다.

  1. json.RawMessage 활용: 문제가 있는 필드를 json.RawMessage 유형.
  2. JSON "-" 이름 사용: JSON 디코더에서 "DisplayName" 필드를 "-"로 정의하여 언마샬링 프로세스에서 제외합니다.

업데이트됨 코드:

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿