我正在尝试将此json格式的字符串转换为GOLANG中的实际json对象。{"predictions": [{"predictions": [4492.0]}, {"predictions": [4515.84716796875]}, {"predictions": [4464.86083984375]}]}
基本上,它是具有键“predictions”和值es的字典数组的字典(每个词典具有作为键“predictions”和值的1元素浮点数组。我创建了两个结构(第一个结构为第一个字典,另一个用于字典数组),但是我无法将字符串json放入我的结构中。我不确定我缺少什么
package main
import (
"encoding/json"
"fmt"
)
type dataPredictions struct {
SinglePredictions *SinglePredictions `json:"predictions"`
}
type SinglePredictions struct {
Predictions []map[string]int `json:predictions`
}
func main() {
s := `{"predictions": [{"predictions": [4492.0]}, {"predictions": [4515.84716796875]}, {"predictions": [4464.86083984375]}]}`
data := &dataPredictions{
SinglePredictions: &SinglePredictions{},
}
err := json.Unmarshal([]byte(s), data)
s2, _ := json.Marshal(data)
fmt.Println(err)
fmt.Println(data.SinglePredictions)
fmt.Println(string(s2))
}
我得到的错误如下。
json: cannot unmarshal array into Go struct field dataPredictions.predictions of type main.SinglePredictions
最佳答案
基本上有两个错误。首先是您没有将SinglePredictions定义为 slice ,这就是为什么首先出现错误的原因,然后在仅需要传递[]float64
时使用了 map 。
package main
import (
"encoding/json"
"fmt"
)
type dataPredictions struct {
SinglePredictions []*SinglePredictions `json:"predictions"`
}
type SinglePredictions struct {
Predictions []float64 `json:"predictions"`
}
func main() {
s := `{"predictions": [{"predictions": [4492.0]}, {"predictions": [4515.84716796875]}, {"predictions": [4464.86083984375]}]}`
// Note that you don't need to assign values manually - json.Unmarshal
// will do that for you.
data := &dataPredictions{}
err := json.Unmarshal([]byte(s), data)
s2, _ := json.Marshal(data)
fmt.Println(err)
fmt.Println(data.SinglePredictions)
fmt.Println(string(s2))
}
您犯的错误似乎是一直在考虑Go会将第一个数组解码为
dataPredictions.SinglePredictions.Predictions
。但是在dataPredictions
中,您有一个字段,用于选择最顶部对象中的"predictions"
键,然后将其值传递给unithal编成*SinglePredictions