>백엔드 개발 >Golang >golang 불규칙한 json 구문 분석

golang 불규칙한 json 구문 분석

(*-*)浩
(*-*)浩원래의
2019-12-17 13:26:053041검색

golang 불규칙한 json 구문 분석

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.