我正在尝试读取一个json文件并在我的Go类中解析为jsonObject。 当我收到它时,json有一个随机的名字和元素数量。 例如:
{"707514313":1505680270,"1568212945":1505676950,"732898933":1505681884}
所以我看到的所有示例都使用结构来定义unmarshal的接口,在那里他们放置了json值的名称,但在我的情况下我不能这样做,因为我不知道有多少和json值的名称。
var settings struct {
Name1 string `json:"707514313"`
Name2 string `json:"1568212945"`
Who knows how many more and with which names?!
}
所以我最终使用默认界面
进行解组func loadFileToJson(filename string) {
plan, _ := ioutil.ReadFile(filename)
var data interface{}
checkError(json.Unmarshal(plan, &data))
fmt.Println("Data %s ", data)
}
数据加载(map[String]interface{})
知道如何实现我想要的目标。
编辑:
我创建了这个结构
type Structure struct {
Name map[string]uint64
}
通过
更改旧的默认值var jsonObject []Structure
checkError(json.Unmarshal(plan, &jsonObject))
给我这个错误
json: cannot unmarshal object into Go value of type []main.StructureData %s []
答案 0 :(得分:2)
正如@Anzel指出,您的数据似乎非常适合map[string]uint64
。这假定了一些事情,即你的对象键总是字符串(如你的例子),并且值总是uint64(再次作为你的样本数据建议)。因此,解组为该数据类型而不是interface{}
plan := []byte(`{"707514313":1505680270,"1568212945":1505676950,"732898933":1505681884}`)
var data map[string]uint64
json.Unmarshal(plan, &data)
fmt.Printf("Data is %+v\n", data)
<强>输出强>
Data is map[1568212945:1505676950 732898933:1505681884 707514313:1505680270]
答案 1 :(得分:1)
如评论所示,您只需将字段类型设置为map[string]uint64
并实现一些方法来解析文件并获取地图值。
在这个游乐场中查看一些伪代码: playground
但是,根据您的地图值,您可能需要将字段类型定义为map[string]uint64
或反映json结构的任何内容,例如map[string]interface{}
甚至是嵌套结构的嵌入式结构。
希望这有帮助。