用Go解析复杂的JSON
我遇到的问题是用Go解析一些嵌套的JSON。我的主要问题是,我无法正确建模我的结构,试图让图书馆获取任何信息。以下是JSON数据的示例:http://pastebin.com/fcGQqi5z用Go解析复杂的JSON
该数据来自银行,已被清理隐私。理想情况下,我只对交易ID,金额和描述感兴趣。有没有办法只用Go来拉这些值?
这是我最初的尝试:
type Trans struct {
TransId string
Amount int
Description string
}
你是对的轨道:
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)
}
//编辑
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
}
由于Amount和Description嵌套在“AdditionalInfo”中,分析器如何知道如何在不明确告诉它们位于“AdditionalInfo”内的情况下如何获取? – 2014-10-03 15:11:42
@JoshuaGilman他们不是嵌套在你给的例子中? – OneOfOne 2014-10-03 15:22:19
我站好了。只是为了学习,我如何将“AdditionalInfo”中的任何细节合并? – 2014-10-03 15:28:52
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)
}
你可以发布有效的json,可以很容易地复制/粘贴? – OneOfOne 2014-10-03 14:41:58
使用有效的Json更新了pastebin – 2014-10-03 14:50:07