golang json 처리 struct에서 구성원을 내보내지 않았습니다

1262 단어
Golang의 json으로 Marshal의 구조체를 만들 때 구조체의 내보내지 않은 구성원은 json에 접근할 수 없습니다. 즉, json 인코딩 결과가 나타나지 않습니다. (소문자 구성원은 내보낼 수 없습니다.)
이것은 기술적인 문제로 인해 일어난 것이다. 골롱의 구조체 안의 구성원의 이름이 소문자로 시작하면 다른 가방은 접근할 수 없다. 즉, json은 우리의 구조체에서 소문자로 시작하는 구성원에게 접근할 수 없다.
이거는 두 가지 방법으로 해결할 수 있어요.
1. struct의 멤버는 대문자로 시작해서 tag를 넣는다
2. json을 실현한다.Marshaler 커넥터
첫 번째 방법은 흔한데 여기는 자세히 펼치지 않아요.
두 번째 방법은 다음과 같다.
http://play.golang.org/p/AiTwUOWkiT
package main

import "fmt"
import "encoding/json"

func main() {
	var s S
	s.a = 5
	s.b[0] = 3.123
	s.b[1] = 111.11
	s.b[2] = 1234.123
	s.c = "hello"
	s.d[0] = 0x55

	j, _ := json.Marshal(s)
	fmt.Println(string(j))
}

type S struct {
	a int
	b [4]float32
	c string
	d [12]byte
}

func (this S) MarshalJSON() ([]byte, error) {
	return json.Marshal(map[string]interface{}{
		"a": this.a,
		"b": this.b,
		"c": this.c,
		"d": this.d,
	})
}

출력:
{"a":5,"b":[3.123,111.11,1234.123,0],"c":"hello","d":[85,0,0,0,0,0,0,0,0,0,0,0]}

즉 구조체가MarshalJSON()([]byte,error) 함수를 실현하면 됩니다. 이 함수에서 내보내고 싶은 구성원을 내보내면 됩니다.
이렇게 하면 json을 정상적으로 사용할 수 있다.Marshal 같은 함수예요.

좋은 웹페이지 즐겨찾기