2014-10-03 103 views
1

我遇到的問題是用Go解析一些嵌套的JSON。我的主要問題是,我無法正確建模我的結構,試圖讓圖書館獲取任何信息。以下是JSON數據的示例:http://pastebin.com/fcGQqi5z用Go解析複雜的JSON

該數據來自銀行,已被清理隱私。理想情況下,我只對交易ID,金額和描述感興趣。有沒有辦法只用Go來拉這些值?

這是我最初的嘗試:

type Trans struct { 
    TransId string 
    Amount int 
    Description string 
} 
+0

你可以發佈有效的json,可以很容易地複製/粘貼? – OneOfOne 2014-10-03 14:41:58

+0

使用有效的Json更新了pastebin – 2014-10-03 14:50:07

回答

1

你是對的軌道:

type Trans struct { 
    TransId  string 
    Amount  float64 
    Description string 
} 

func main() { 
    var data struct { 
     Record []Trans 
    } 
    if err := json.Unmarshal([]byte(j), &data); err != nil { 
     fmt.Println(err) 
     return 
    } 
    fmt.Printf("%#v\n", data.Record) 
} 

playground

//編輯

type Trans struct { 
    TransId  string 
    Amount  float64 
    Description string 
    RawInfo  []map[string]json.RawMessage `json:"AdditionalInfo"` 
} 

// also this assumes that 1. all data are strings and 2. they have unique keys 
// if this isn't the case, you can use map[string][]string or something 
func (t *Trans) AdditionalInfo() (m map[string]string) { 
    m = make(map[string]string, len(t.RawInfo)) 
    for _, info := range t.RawInfo { 
     for k, v := range info { 
      m[k] = string(v) 
     } 
    } 
    return 
} 

playground

+0

由於Amount和Description嵌套在「AdditionalInfo」中,分析器如何知道如何在不明確告訴它們位於「AdditionalInfo」內的情況下如何獲取? – 2014-10-03 15:11:42

+0

@JoshuaGilman他們不是嵌套在你給的例子中? – OneOfOne 2014-10-03 15:22:19

+0

我站好了。只是爲了學習,我如何將「AdditionalInfo」中的任何細節合併? – 2014-10-03 15:28:52

1
type Records struct { 
    Records []Record `json:"record"` 
} 

type Record struct { 
    TransId string 
    Amount float64 
    Description string 
} 

func main() { 
    r := Records{} 
    if err := json.Unmarshal([]byte(data), &r); err != nil { 
     log.Fatal(err) 
    } 

    fmt.Println(r) 
}