> 백엔드 개발 > Golang > golang에서 json 형식을 구문 분석하는 방법

golang에서 json 형식을 구문 분석하는 방법

藏色散人
풀어 주다: 2021-01-25 14:43:21
앞으로
2943명이 탐색했습니다.

다음 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 필드를 꺼내서 표시할 결과 문자열로 철자를 입력해야 합니다.

  • json 배열에서 ws 가져오기
  • ws는 배열입니다. , 배열 요소는 object
  • cw는 배열이고 배열 요소는 object
  • w는 문자열
  • cw

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

관련 라벨:
원천:cnblogs.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿