将JSON编组会生成空结构

问题描述 投票:1回答:1

我具有以下JSON结构:

dataJson := `{"data1" : [["a",1]["b",2]], "data2": ["a","b",3]}`

并且想与Go解组。我正在尝试以下代码:

 type myData struct { 
  row map[string][][]interface{} `json:"data1"`
  column map[string][]interface{} `json:"data2"`

}
 var arr myDaya

    _ = json.Unmarshal([]byte(dataJson), &arr)
    log.Printf("Unmarshaled: %v", arr)

但是我得到的数据为空:

Unmarshaled: {map[] map[]}

任何想法如何解析这样的JSON结构?

arrays json go slice
1个回答
0
投票

第一个问题是必须导出结构字段(其名称以大写字母开头)。有关更多详细信息,请参见Why struct fields are showing empty?

[下一步,您输入的JSON无效,data1数组的元素之间缺少逗号。应该是:

{"data1" : [["a",1],["b",2]], "data2": ["a","b",3]}

第三,data1data2是JSON数组,因此您必须在Go中使用切片而不是地图。

类似这样的东西:

type myData struct {
    Row    [][]interface{} `json:"data1"`
    Column []interface{}   `json:"data2"`
}

json.Unmarshal()返回错误,切勿在Go中忽略错误。您至少可以做的是打印它们,以便您知道不正确的地方:

dataJson := `{"data1" : [["a",1],["b",2]], "data2": ["a","b",3]}`

var arr myData
if err := json.Unmarshal([]byte(dataJson), &arr); err != nil {
    log.Println(err)
}
log.Printf("Unmarshaled: %v", arr)

此输出(在Go Playground上尝试):

2009/11/10 23:00:00 Unmarshaled: {[[a 1] [b 2]] [a b 3]}
© www.soinside.com 2019 - 2024. All rights reserved.