json: не может распаковать массив в значение Go типа main.Data - PullRequest
0 голосов
/ 16 мая 2018

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: невозможно разархивировать массив в значение Go типа main.Data.

Глядя на существующие вопросы в stackoverflow, похоже, что я делаювсе хорошо. Кто-нибудь?

1 Ответ

0 голосов
/ 16 мая 2018

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

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-

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...