猿问

如何解决接口{}是字符串,而不是golang中的[]uint8?

我想在json文件中进行读写操作。我为此编写了一个程序但是在解组数据时发生了一个错误代码如下: -


package main


import (

  "encoding/json"

  "fmt"

  "io/ioutil"

)


type Page struct {

  Id           int    `json:"_id" bson:"_id"`

  Title        string `json:"title" bson:"title"`

  Type         string `json:"type" bson:"type"`

  Description  string `json:"description" bson:"description"`

  ProfileImage string `json:"profile_image" bson:"profile_image"`

  DateTime     int64  `json:"date_time" bson:"date_time"`

  Author       string `json:"author" bson:"author"`

  Status       int    `json:"status" bson:"status"`

  Slug         string `json:"slug" bson:"slug"`

}


func main() {

   plan, _ := ioutil.ReadFile("page.json")

   var data interface{}

   err := json.Unmarshal(plan, &data)

   if err != nil {

    fmt.Println(err)

   }

   if sl, ok := data.([]interface{}); ok {

     counter := 0

      for _, val := range sl {

        counter++

        md, _ := val.(map[string]interface{})

        md["_id"] = counter

        fmt.Println(md["_id"])

        for _, k := range md {

            // fmt.Println(k.([]byte))

            rankings := Page{}

            err = json.Unmarshal(k.([]uint8), &rankings)

            if err != nil {

                // nozzle.printError("opening config file", err.Error())

            }


            rankingsJson, _ := json.Marshal(rankings)

            err = ioutil.WriteFile("output.json", rankingsJson, 0644)

            fmt.Printf("%+v", rankings)

        }

      }

   }

}

它给了我错误


恐慌:接口转换:接口 {} 是字符串,而不是 []uint8


协程 1 [正在运行]:


主.main()


/home/iron/go/src/test/json_object_read/main.go:38 +0x545


四季花海
浏览 134回答 1
1回答

不负相思意

我在这里提供了在文件中写入 JSON 并附加更多列的解决方案,请遵循以下代码。package mainimport (  "encoding/json"  "fmt"  "io/ioutil")type Page struct {  Id           int    `json:"_id" bson:"_id"`  Title        string `json:"title" bson:"title"`  Type         string `json:"type" bson:"type"`  Description  string `json:"description" bson:"description"`  ProfileImage string `json:"profile_image" bson:"profile_image"`  DateTime     int64  `json:"date_time" bson:"date_time"`  Author       string `json:"author" bson:"author"`  Status       int    `json:"status" bson:"status"`  Slug         string `json:"slug" bson:"slug"`}func main() {   var data interface{}   plan, _ := ioutil.ReadFile("page.json")   err := json.Unmarshal([]byte(plan), &data)    if err != nil {        fmt.Println(err)    }    var ranking = Page{}    var rankings = []Page{}    if sl, ok := data.([]interface{}); ok {        var counter int = 0        for _, val := range sl {            counter = counter + 1            md, _ := val.(map[string]interface{})            md["_id"] = counter            b, err := json.Marshal(md)            if err != nil {                panic(err)            }            // ********************* Unmarshal *********************            err = json.Unmarshal(b, &ranking)            if err != nil {                fmt.Println(err)            }            rankings = append(rankings, ranking)        }    }    rankingsJson, _ := json.Marshal(rankings)    err = ioutil.WriteFile("output.json", rankingsJson, 0644)    fmt.Printf("%+v", rankings)}
随时随地看视频慕课网APP

相关分类

Go
我要回答