我正在尝试将此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

09-20 07:14