我正在尝试将传入的JSON解组到包含结构数组的结构中。但是我得到了错误
“无效的输入。JSON格式错误。json:无法将数组解组到类型为app.AssetStorage的Go结构字段DataInput.Asset中”。
我尝试在此处重新创建代码:https://play.golang.org/p/RuBaBjPmWxO,但是我无法重现该错误(尽管传入的消息和代码是相同的)。
type AssetStorage struct {
Event string `json:"Event"`
EmployeeID int `json:"EmployeeID"`
EmployeeEmail string `json:"EmployeeEmail"`
PerformedBy string `json:"PerformedBy"`
Timestamp string `json:"Timestamp"`
AlgorithmID string `json:"AlgorithmID"`
AlgorithmHash string `json:"AlgorithmHash"`
Objects []Object `json:"Objects"`
}
type Object struct {
ShortName string `json:"ShortName"`
Hash string `json:"Hash"`
DestroyDate string `json:"DestroyDate"`
}
type DataInput struct {
Username string
Token string `json:"Token"`
Asset AssetStorage `json:"Asset"`
}
func main() {
var data DataInput
json.Unmarshal(input, data)
data.Username = data.Asset.EmployeeEmail
fmt.Printf("%+v\n", data)
}
答案 0 :(得分:3)
您的代码中存在三个错误,一个是您在解组JSON时未使用DataInput
结构的地址。
这应该是:
var data DataInput
json.Unmarshal(input, data)
如下所示:
var data DataInput
if err := json.Unmarshal(input, &data); err != nil {
log.Println(err)
}
以上代码中的一条建议。永远不要跳过错误以了解更多有关错误的信息
下一步,错误提示:
无效的输入。 JSON格式错误。 json:无法将数组解组到 转到类型为app.AssetStorage的结构字段DataInput.Asset
DataInput.Asset
应该是一个json对象数组,您应该在AssetStorage
结构的声明中将[]AssetStorage
更改为DataInput
。
另一个错误是,您将EmployeeID
结构的AssetStorage
字段的类型声明为int
,应为string
Go Playground上的工作代码
答案 1 :(得分:0)
答案在错误消息中:
无效的输入。 JSON格式错误。 json:无法将数组解组到Go结构字段DataInput。类型为app.AssetStorage的资产
您要解析的json将DataInput.Asset
作为AssetStorage
对象的 array 。因此,类型必须为[]AssetStorage
。