2014-07-23 1 views
4

JSON의 상대적으로 복잡한 비트를 구문 분석하려고합니다. 그것은 직접적인 노드를 가지며 가변 개수의 요소를 가진 배열을가집니다. 다음은 샘플입니다.GO에 구조체 정의의 일부로 배열을 포함하려면 어떻게해야합니까?

{ 
status: 200, 
generated: "2014-07-23T13:09:30.315Z", 
copyright: "Copyright (c) 2014 Us Not You. All Rights Reserved.", 
results: 1, 
start: 0, 
links: { 
     next: null, 
     prev: null, 
     self: "http://thing.com/thing.json" 
    }, 
docs: [ 
     { 
      id: "thingID_001", 
     } 
    ] 
} 

간체, 물론. 각 노드에는 여러 개의 노드가있는 문서는 0 개 이상있을 수 있습니다. "링크"는 쉽고, 올바른 필드가있는 구조체를 정의하면 거기에 있습니다. 하지만 워드 프로세서, 나는 보안관에게 갈 수 없다. 여기 내 코드입니다 :

import (
    "net/http" 
    "fmt" 
    "io/ioutil" 
    "encoding/json" 
) 
type Thinglinks struct { 
    Next string 
    Prev string 
    Self string 
} 
//type ThingDoc struct { 
// Id string 
// Type string 
//} 
type ThingSection struct { 
    Status int 
    Generated string 
    Copyright string 
    Results int 
    Start int 
    Links thinglinks 
    Docs []map[string]interface{} 
} 

func main() { 
    resp, err := http.Get("http://thing.com/thing.json") 
    if err != nil { 
     fmt.Println(err) 
     } 
    defer resp.Body.Close() 
    body, err := ioutil.ReadAll(resp.Body) 
    var s ThingSection 
    err3 := json.Unmarshal(body, &s) 
    if err3 == nil { 
     fmt.Println(s) 
     fmt.Println(s.Links.Self) 
     if len(s.Docs) >0 { 
      fmt.Println(s.Docs[0]) 
     } 
    } else { 
     fmt.Println(err3) 
    } 
} 

내가 컴파일하고

난 항상 빈 세트입니다 문서를 제외한 모든 노드에 대한 내 예상 결과를 얻을 실행됩니다.

ThingSection 구조체에 대한 형식 선언에 "문서"정의가 있다고 생각되지만 그 부분에서 수행 할 작업을 파악하지 못했습니다.

어떤 도움이 필요합니까?

+0

, 나는이 시도 : http://play.golang.org/p/sQCBq9RIYa. 문서 배열이 비어 있지 않았습니다. –

+0

재미 있습니다. JSON을 코드에 넣으면 실제로 작동합니다. 아마도 내가 여기서 그걸 복사하는데 이상한 것을했을 것입니다. 지금 조사 중입니다. –

+0

알림'id : "thingID_001"뒤에 쉼표를 지워야했습니다. 작동하지 않고 jsonlint가 잘못된 JSON으로 표시했습니다. 그것은 관련 될 수 있습니다. –

답변

5

이것이 실제 JSON 인 경우 문제가 있습니다. JSON은 언어 정의에 표시된대로 필드 이름을 따옴표로 묶어야합니다 (예 : http://json.org/). 쉼표가 필요하지 않을 수 있습니다.

나는 놀이터에서이 비트를 가지고 있으며 따옴표를 추가하고 문서 내에서 불필요한 ','을 제거한 후 제대로 작동합니다. 나는 당신의 문제를 재현 할 수

http://play.golang.org/p/6OYeTuftfg

+0

위 json에서 따옴표가 누락되었습니다. 그들은 내 출처에있다. 도움을 주셔서 감사합니다. –

+1

이것은 당신과 Vitor가 단순화 된 형태로 기술 한 것처럼 작동합니다. 어느 것이 좋니. 그만큼 효과가 있습니다. 이제 실제 "Doc"항목을 올바르게 처리 할 수 ​​있어야하지만 추가 연습입니다. 도와 주셔서 감사합니다. –

관련 문제