> 백엔드 개발 > Golang > Go에서 중첩된 JSON 개체를 문자열이나 바이트로 처리하는 방법은 무엇입니까?

Go에서 중첩된 JSON 개체를 문자열이나 바이트로 처리하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-11-29 07:15:11
원래의
557명이 탐색했습니다.

How to Handle Nested JSON Objects as Strings or Bytes in Go?

중첩된 JSON 개체를 문자열 또는 바이트로 마샬링

JSON 데이터를 역마샬링할 때 중첩된 개체를 Go 유형으로 구문 분석하는 대신 불투명한 값으로 처리하는 것이 바람직한 경우가 많습니다. 이는 인코딩/json 패키지에서 제공하는 RawMessage 유형을 사용하여 달성할 수 있습니다.

문제

다음 JSON 및 Go 구조체를 고려하세요.

{
  "id": 15,
  "foo": { "foo": 123, "bar": "baz" }
}
로그인 후 복사
type Bar struct {
  Id int64
  Foo []byte
}
로그인 후 복사

시도 이 JSON을 Bar 구조체로 역마샬링하면 다음과 같은 결과가 발생합니다. 오류:

json: cannot unmarshal object into Go value of type []uint8
로그인 후 복사

해결책

중첩된 객체를 문자열이나 바이트 조각으로 유지하려면 RawMessage 유형을 사용하세요.

type Bar struct {
  Id int64
  Foo json.RawMessage
}
로그인 후 복사

문서에 설명된 대로 , RawMessage는 Marshaler와 Unmarshaler를 모두 구현하는 원시 인코딩된 JSON 개체입니다. 인터페이스.

다음은 실제 예입니다:

package main

import (
  "encoding/json"
  "fmt"
)

var jsonStr = []byte(`{
  "id": 15,
  "foo": { "foo": 123, "bar": "baz" }
}`)

type Bar struct {
  Id int64
  Foo json.RawMessage
}

func main() {
  var bar Bar

  if err := json.Unmarshal(jsonStr, &bar); err != nil {
    panic(err)
  }
  fmt.Printf("%+v", bar)
}
로그인 후 복사

출력:

{Id:15 Foo:[123 32 34 102 111 111 34 58 32 49 50 51 44 32 34 98 97 114 34 58 32 34 98 97 122 34 32 125]}
로그인 후 복사

Playground

[Playground 링크](https://play.golang.org/p/L2yJj2e72dS)

위 내용은 Go에서 중첩된 JSON 개체를 문자열이나 바이트로 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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