json.Unmarshal 작업 개체는 []바이트입니다. 이는 처리된 모든 JSON을 메모리에 로드해야 함을 의미합니다.
로드된 JSON이 있는 경우 json.Unmarshal을 사용하는 것이 더 빠릅니다. (추천 학습: Go
) json.decoder는 스트림 또는 IO.Reader 인터페이스를 구현하는 다른 유형을 작동합니다. 이는 수신 또는 전송 중에 구문 분석될 수 있음을 의미합니다. 더 큰 데이터 세트를 처리할 때 전체 JSON을 메모리에 다시 복사할 필요가 없습니다.가장 좋은 선택은 다음과 같습니다.
데이터가 io.Reader에서 나오거나 스트림에서 데이터를 읽어야 하는 경우 json.Decoder를 선택하세요.전체 JSON이 메모리에 로드된 경우 json을 사용하세요. Unmarshal무한 유형 구문 분석
때로는 불확실한 필드가 있는 JSON을 접할 때 판단과 구문 분석을 동시에 수행해야 합니다. 예:t1 := `{"type":"a", id:"aaa"}`t2 := `{"type":"b", id:22222}`
type Data struct { Type string `json:"type"` Id interface{} `json:"id"`}func decode(t string) { var x Data err := json.Unmarshal([]byte(t), &x) if err != nil { panic(err) } if x.Type == "a" { fmt.Println(x.Id.(string)) } else { fmt.Println(x.Id.(float64)) //json解析中number默认作为float64解析 } }func main() { t1 := `{"type":"a", "id":"aaa"}` t2 := `{"type":"b", "id":22222}` decode(t1) decode(t2) }
aaa 22222
위 내용은 golang 불규칙한 json 구문 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!