2014-12-31 3 views
1

json 파일의 필드에서 값을 파싱하고 가져와야합니다.이동 언어로 다중 레벨 json 파일 구문 분석

[{"id": 27}, {"id": 0, "label": "Label 0"}, null, {"id": 93}, {"id": 85}, {"id": 54}, null, {"id": 46, "label": "Label 46"}]}}  

비록 단일 레벨에서 작동 할 수 있지만 레벨을 반복 할 수있는 방법은 없습니다. 나는 Google, 다양한 도움말 사이트 및 심지어 stackoverflow에서 답변을 찾으려고했습니다. 다단계 json 바이트 배열 작업에 도움이 될만한 예제를 찾을 수 없습니다. 누군가 나를 이해하고 작업하도록 유도 할 수 있기를 바랍니다.

+0

필요한 것을 정의하십시오. 일반적으로 json을 엄격한 데이터 형식으로 매핑하는 것이 가장 좋은 방법이며, 그러면 쉽게 수행 할 수 있습니다. –

답변

4

그냥 구조체의 배열로 JSON을 구문 분석 미리 감사 :

package main 

import (
    "encoding/json" 
    "fmt" 
) 

type Item struct { 
    Id int 
    Label string 
} 

func main() { 

    data := []byte(`[{"id": 27}, {"id": 0, "label": "Label 0"}, null, {"id": 93}, {"id": 85}, {"id": 54}, null, {"id": 46, "label": "Label 46"}]`) 
    var val []*Item 

    if err := json.Unmarshal(data, &val); err != nil { 
     fmt.Printf("Error: %s\n", val) 
     return 
    } 

    for _, it := range val { 
     fmt.Printf("%#v\n", it) 
    } 

} 

나는이 도움이되기를 바랍니다.

+0

초기화 할 때 Item 구조체에 대한 포인터가 필요한 이유를 설명 할 수 있습니까? var val [] * Item? – wkcamp

+0

포인터를 사용하여 JSON의 'null'항목을 반영했습니다. 이 방법으로 마샬 러는 Item {0, ""} 대신 'nil'을 슬라이스에 삽입합니다. – plusmid

+0

좋아요. 고맙습니다. – wkcamp