> 백엔드 개발 > Golang > 이중 역마샬링 없이 Go에서 JSON을 구문 분석하는 방법은 무엇입니까?

이중 역마샬링 없이 Go에서 JSON을 구문 분석하는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2024-12-26 15:58:14
원래의
1003명이 탐색했습니다.

How to Parse JSON in Go Without Double Unmarshaling?

Go에서 이중 역마샬링 없이 JSON 구문 분석

Go에서는 별도의 작업 없이 다양한 유형의 JSON 데이터를 구문 분석하려는 상황에 직면할 수 있습니다. 두 번 언마샬링합니다. 관련된 단계를 살펴보겠습니다.

1단계: 일반 맵으로 비정렬화

언급한 것처럼 첫 번째 단계는 JSON을 일반 맵으로 비정렬화하는 것입니다.[string ]인터페이스{}. 이는 키가 문자열이고 값이 다양한 데이터 구조를 보유할 수 있는 동적 인터페이스 유형인 맵과 유사한 구조를 제공합니다.

2단계: 키 및 값 유형 식별

맵이 있으면 이를 반복하여 관심 있는 키를 찾으세요. 값 유형에 따라 다음 단계를 진행할 수 있습니다. steps.

3단계: 알려진 유형을 직접 처리

값 유형이 알려진 구조체인 경우 이를 직접 캐스팅하여 원하는 구조체로 사용할 수 있습니다. 예를 들어 Ping 구조체가 있는 경우 맵 값이 Ping으로 캐스팅 가능한지 확인할 수 있습니다. 이는 JSON 필드 이름이 구조체 필드 이름과 일치하고 데이터 유형이 호환되는 경우에 잘 작동합니다.

4단계: 알 수 없는 유형에 대한 대체 접근 방식

값 유형이 알려지지 않았거나 사전 정의된 구조체와 호환되지 않는 경우 다음을 사용할 수 있습니다. 접근 방식:

  1. json.Marshal을 사용하여 인터페이스의 값을 다시 JSON으로 마샬링합니다.
  2. json.Unmarshal을 사용하여 JSON을 원하는 구조체로 역마샬링합니다.

부분 개선 역마샬링

이중 역마샬링이 필요하지 않도록 인터페이스{} 대신 json.RawMessage로 값을 역마샬링하여 데이터를 부분적으로 역마샬링할 수 있습니다. json.RawMessage는 원시 JSON 값을 나타내며 나중에 원하는 구조체로 직접 역마샬링될 수 있습니다.

코드 예제

제공된 예제에서 코드는 다음과 같습니다.

var myMap map[string]json.RawMessage

...

switch k {
    case "ping":
        // ...
    case "ack":
        err = json.Unmarshal(v, &myAck)
}
로그인 후 복사

이 접근 방식은 값 유형이 알려져 있습니다. 그러나 다양한 경우를 처리하려면 여전히 스위치 문을 작성해야 합니다.

위 내용은 이중 역마샬링 없이 Go에서 JSON을 구문 분석하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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