> 백엔드 개발 > Golang > 구조체를 사용하지 않고 Go에서 특정 JSON 값을 효율적으로 추출하려면 어떻게 해야 합니까?

구조체를 사용하지 않고 Go에서 특정 JSON 값을 효율적으로 추출하려면 어떻게 해야 합니까?

Linda Hamilton
풀어 주다: 2024-12-27 12:46:16
원래의
348명이 탐색했습니다.

How Can I Efficiently Extract Specific JSON Values in Go Without Using Structs?

Go의 JSON 값 구문 분석

어떤 경우에는 구조체 없이 JSON 객체에서 특정 값을 추출하는 것이 유리합니다. 이 문서에서는 Go에서 이를 달성하는 방법을 살펴보고 먼저 구조체로 역정렬화하는 보다 전통적인 접근 방식에 대한 대안을 제공합니다.

옵션 1: Map[string]인터페이스{}

Go는 미리 정의된 구조체 없이 JSON 값을 저장하기 위한 내장 솔루션을 제공합니다. json.Unmarshal 함수를 사용하면 JSON을 map[string]인터페이스{}로 디코딩할 수 있습니다. 여기서 키는 JSON 필드 이름을 나타내는 문자열이고 값은 Go 기본 유형에 해당하는 값입니다.

예:

b := []byte(`{"ask_price": "1.0"}`)
data := make(map[string]interface{})
err := json.Unmarshal(b, &data)
if err != nil {
  panic(err)
}

if price, ok := data["ask_price"].(string); ok {
  fmt.Println(price)
} else {
  panic("wrong type")
}
로그인 후 복사

이 접근 방식을 사용하면 해당 구조체 필드 없이 JSON 속성 이름으로 직접 필요한 특정 값에 액세스할 수 있습니다. 그러나 검색된 값이 예상된 유형인지 확인하려면 유형 어설션이 필요합니다.

옵션 2: 사용자 정의 Unmarshaler

또는 사용자 정의 json.Unmarshaler를 구현할 수 있습니다. 디코딩 프로세스를 보다 구체적으로 처리하기 위한 대상 유형의 인터페이스입니다. 이를 통해 JSON 데이터가 원하는 Go 값으로 역마샬링되는 방법을 더 효과적으로 제어할 수 있습니다.

예:

type AskPrice struct {
  price string
}

func (a *AskPrice) UnmarshalJSON(data []byte) error {
  var v string 
  if err := json.Unmarshal(data, &v); err != nil {
    return err
  }
  a.price = v
  return nil
}

// ...
로그인 후 복사

이 접근 방식을 사용하면 해당 구조체 필드에 json:"ask_price" 태그를 지정하고 & 포인터를 사용하여 사용자 정의 언마샬러를 지정할 수 있습니다. 디코딩된 값이 구조체 필드에 직접 할당되도록 수신기를 사용합니다. 이렇게 하면 명시적인 유형 어설션이 필요하지 않으며 더욱 맞춤화된 역마샬링 환경이 제공됩니다.

이러한 옵션을 신중하게 고려하면 사전 정의된 구조체에 의존하지 않고도 Go에서 특정 JSON 값을 효율적으로 추출할 수 있습니다.

위 내용은 구조체를 사용하지 않고 Go에서 특정 JSON 값을 효율적으로 추출하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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