다음 golang 튜토리얼 칼럼에서는 golang이 json 형식을 구문 분석하는 방법을 소개합니다. 도움이 필요한 친구들에게 도움이 되길 바랍니다!
프로젝트에서 클라이언트와 서버 사이의 대화형 데이터 부분은 json이므로 서버에서 구문 분석해야 합니다. 실제로 복잡한 json을 구문 분석하는 것은 상당히 힘듭니다.
대화형 데이터는 다음 형식과 유사합니다.
{"sn":1,"ls":false,"bg":0,"ed":0,"ws":[{"bg":0,"cw":[{"sc":0,"w":"还"}]},{"bg":0,"cw":[{"sc":0,"w":"有点"}]},{"bg":0,"cw":[{"sc":0,"w":"眼熟"}]}]}
json 형식에서 w 필드를 꺼내서 표시할 결과 문자열로 철자를 입력해야 합니다.
에서 w 필드를 얻기 위한 Traverse입니다. 초기 구현은 다음과 같습니다.
func RecResultJsonToPlain() { var recResult string var dat map[string]interface{} json.Unmarshal([]byte(json_str), &dat) if v, ok := dat["ws"]; ok { ws := v.([]interface{}) for i, wsItem := range ws { wsMap := wsItem.(map[string]interface{}) if vCw, ok := wsMap["cw"]; ok { cw := vCw.([]interface{}) for i, cwItem := range cw { cwItemMap := cwItem.(map[string]interface{}) if w, ok := cwItemMap["w"]; ok { recResult = recResult + w.(string) } } } } } fmt.Println(recResult) }
In 이렇게 하면 유형을 레이어별로 변환한 다음 요소를 얻는 것이 약간 번거롭습니다. 알려진 json 데이터 구조이므로 구조를 정의한 후 구문 분석할 수 있습니다.
type CWItem struct { SC int32 `json:"sc"` W string `json:"w"`}type WSItem struct { CW []CWItem}type IatResult struct { SN int32 `json:"sn"` LS bool `json:"ls"` BG int32 `json:"bg"` ED int32 `json:"ed"` WS []WSItem `json:"ws"`}
Note 정의할 때 변수 이름의 첫 글자는 대문자로 시작해야 합니다. 도구를 사용하여 자동으로 정의를 생성할 수도 있습니다 https://mholt.github.io/json-to-go/; :
type AutoGenerated struct { Sn int `json:"sn"` Ls bool `json:"ls"` Bg int `json:"bg"` Ed int `json:"ed"` Ws []struct { Bg int `json:"bg"` Cw []struct { Sc int `json:"sc"` W string `json:"w"` } `json:"cw"` } `json:"ws"` }
func RecResultJsonToPlain(jsonResult []byte)(recPlainResult string) { var r IatResult json.Unmarshal(jsonResult, &r) for _, wsItem := range r.WS { for _, cwItem := range wsItem.CW { recPlainResult = recPlainResult + cwItem.W } } return recPlainResult }
위 요소에는 json:"sn"
필수 설명이 있으므로 해당 요소만 얻으면 되는 경우 다른 요소는 정의하지 않아도 괜찮습니다. 또 다른 종류의 데이터는 배열의 요소가 여전히 배열이고 마지막 배열에 숫자 또는 문자열 유형이 포함되어 있다는 것입니다. 데이터는 다음과 같습니다. 검색 UnmarshalJSON
{"Asks": [[21, 1], [22, 1]] ,"Bids": [[20, 1], [19, 1]]}
을 다시 구현한 코드는 다음과 같습니다. 더 많은 golang 관련 기술 기사를 보려면
go 언어 칼럼을 방문하세요!
위 내용은 golang에서 json 형식을 구문 분석하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!