Json: невозможно демаршалировать массив в значение Go типа main.Data

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 16.05.2018 10:12

@Himanshu raw, err: = ioutil.ReadFile (* testFile) if err! = Nil {return} Это то, что я использовал для чтения файла. Где testFile - это файл json, взятый на вход.

Supriya Singh 16.05.2018 10:28

Ошибка предполагает, что файл содержит не объект JSON, а какой-то массив JSON. Дважды проверьте содержимое файла.

Peter 16.05.2018 10:54
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
0
3
2 202
1

Ответы 1

Сделал несколько модификаций, и демаршалинг работал нормально.

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}

Supriya Singh 16.05.2018 09:22

Не могли бы вы попробовать вот так?

Supriya Singh 16.05.2018 09:25

Другие вопросы по теме