나는 서버에서 응답이 유형의 구문 분석하려고 해요 : 메시지의 유형에 대한 내 자신의 hack'ish 파서를 작성 외에도구문 분석 명시 적으로 배열
[[1,"a","b",2,"000000",[[1,2,3],[1,2,3]],"x","y","z",[[1,2,3],[1,2,3]]]]
이것을 해석하는 표준 방법이 그 I 알지 못해?
나는 서버에서 응답이 유형의 구문 분석하려고 해요 : 메시지의 유형에 대한 내 자신의 hack'ish 파서를 작성 외에도구문 분석 명시 적으로 배열
[[1,"a","b",2,"000000",[[1,2,3],[1,2,3]],"x","y","z",[[1,2,3],[1,2,3]]]]
이것을 해석하는 표준 방법이 그 I 알지 못해?
입력 내용은 JSON 문자열입니다. Go에서는 encoding/json
패키지를 사용하여 디코드 할 수 있습니다.
일반적으로 JSON 문자열의 구조를 미리 알면 Go struct
유형을 구성하여 모델링 한 다음 struct
유형의 값으로 언 마샬링 할 수 있습니다.
구조를 알 수 없거나 변화하는 경우, 당신이 어떤 JSON 데이터의 대상이 될 수있는 유형 interface{}
의 값으로 비 정렬 화 수
s := `[[1,"a","b",2,"000000",[[1,2,3],[1,2,3]],"x","y","z",[[1,2,3],[1,2,3]]]]`
var v interface{}
if err := json.Unmarshal([]byte(s), &v); err != nil {
fmt.Println(err)
return
}
fmt.Println(v)
fmt.Printf("%#v\n", v)
출력합니다 (Go Playground에 그것을 시도) :
[[1 a b 2 000000 [[1 2 3] [1 2 3]] x y z [[1 2 3] [1 2 3]]]]
[]interface {}{[]interface {}{1, "a", "b", 2, "000000", []interface {}{[]interface {}{1, 2, 3}, []interface {}{1, 2, 3}}, "x", "y", "z", []interface {}{[]interface {}{1, 2, 3}, []interface {}{1, 2, 3}}}}
결과에서 볼 수 있듯이 다양한 유형의 요소 (JSON 번호, 문자열 및 훨씬 많은 조각)가있는 슬라이스 조각이 생성됩니다. 당신이 값을 "추출"을 type assertion를 사용할 필요로 물론
[]interface{}{
[]interface{}{
1, "a", "b", 2, "000000",
[]interface{}{
[]interface{}{1, 2, 3},
[]interface{}{1, 2, 3}},
"x", "y", "z",
[]interface{}{
[]interface{}{1, 2, 3},
[]interface{}{1, 2, 3},
},
},
}
이 매우 편리되지 않습니다 :
여기 (이동의 composite literal 구문을 사용하여) 그것의 더 나은 느낌을 얻을 들여 쓰기를 추가 동일한 출력을입니다
fmt.Printf("%T %[1]v\n", v.([]interface{})[0].([]interface{})[0])
fmt.Printf("%T %[1]v\n", v.([]interface{})[0].([]interface{})[1])
출력 : 01,235
interface{}
유형이 "일반"의 값, 예를 들면 (또한 검증을 위해 자신의 형태를 인쇄) 제 2 비 - 배열의 값을 추출
float64 1
string a
Go의 JSON 번호는 정수가 될 수 있지만 (다른 유형이 명시 적으로 지정되지 않은 경우) float64
유형의 값에 언 마샬링된다는 점에 유의해야합니다.