Json - это -
{
"apiAddr":"abc",
"data":
[
{
"key":"uid1",
"name":"test",
"commandList":["dummy cmd"],
"frequency":"1",
"deviceList":["dev1"],
"lastUpdatedBy": "user",
"status":"Do something"
}
]
}
И код для демаршаллинга -
type Data struct {
APIAddr string `json:"apiAddr"`
Data []Template `json:"data"`
}
type Template struct {
Key string `json:"key"`
Name string `json:"name"`
CommandList []string `json:"commandList"`
Frequency string `json:"frequency"`
DeviceList []string `json:"deviceList"`
LastUpdatedBy string `json:"lastUpdatedBy"`
Status string `json:"status"`
}
raw, err := ioutil.ReadFile(*testFile)
if err != nil {
return
}
var testTemplates Data
err = json.Unmarshal(raw, &testTemplates)
if err != nil {
return
}
где testFile - это файл json. Я получаю эту ошибку
json: cannot unmarshal array into Go value of type main.Data.
Глядя на существующие вопросы в stackoverflow, похоже, у меня все в порядке.
@Himanshu raw, err: = ioutil.ReadFile (* testFile) if err! = Nil {return} Это то, что я использовал для чтения файла. Где testFile - это файл json, взятый на вход.
Ошибка предполагает, что файл содержит не объект JSON, а какой-то массив JSON. Дважды проверьте содержимое файла.

Сделал несколько модификаций, и демаршалинг работал нормально.
package main
import (
"encoding/json"
"fmt"
)
var raw = ` {
"apiAddr":"abc",
"data":
[
{
"key":"uid1",
"name":"test",
"commandList":["dummy cmd"],
"frequency":"1",
"deviceList":["dev1"],
"lastUpdatedBy": "user",
"status":"Do something"
}
]
}`
func main() {
var testTemplates Data
err := json.Unmarshal([]byte(raw), &testTemplates)
if err != nil {
return
}
fmt.Println("Hello, playground", testTemplates)
}
type Data struct {
APIAddr string `json:"apiAddr"`
Data []Template `json:"data"`
}
type Template struct {
Key string `json:"key"`
Name string `json:"name"`
CommandList []string `json:"commandList"`
Frequency string `json:"frequency"`
DeviceList []string `json:"deviceList"`
LastUpdatedBy string `json:"lastUpdatedBy"`
Status string `json:"status"`
}
Вы также можете запустить его в Playground: https://play.golang.org/p/TSmUnFYO97-
Я уже делаю это // Разбираю предоставленный файл тестового шаблона, где testFile - это файл json. raw, err: = ioutil.ReadFile (* testFile) if err! = nil {return}
Не могли бы вы попробовать вот так?
Пожалуйста, опубликуйте код, который вы пробовали для чтения файла