收到EOF恐慌错误

时间:2016-09-22 23:36:21

标签: go

我正在尝试解码我​​得到的json。这是我得到的一个例子json:

{"response":"1","number":"1234","id":nil}

这是我的结构:

type AutoGenerated struct {
Response string  `json:"response"`
Number     string  `json:"number"`
ID         interface{}     `json:"id"`
}

我在encode / json中使用decode函数。我错了什么? ID有机会成为字符串或零值。

这是我确切的错误,因为它有帮助。

panic: EOF

2 个答案:

答案 0 :(得分:1)

如果没有你展示你是如何做到的,我认为最好的答案是向你展示如何做到这一点。

package main

import (
    "fmt"
    "log"
    "encoding/json"
)

func main() {
    j := []byte(`{"response":"1","number":"1234","id":null}`)
    data := AutoGenerated{}
    err := json.Unmarshal(j, &data)
    if err != nil {
        log.Println(err.Error())
        return
    }
    fmt.Println(data)
}

type AutoGenerated struct {
    Response string      `json:"response"`
    Number   string      `json:"number"`
    ID       interface{} `json:"id"`
}

答案 1 :(得分:-1)

您在此处放置的JSON字符串无效。您可以找this code sample作为参考。

如果您要将 id 字段设置为 nil ,请不要将其放在JSON字符串中。

package main

import (
    "encoding/json"
    "fmt"
    "io"
    "log"
    "strings"
)

type AutoGenerated struct {
    Response string      `json:"response"`
    Number   string      `json:"number"`
    ID       interface{} `json:"id"`
}

func main() {
    jsonStream := `
        { "response": "1", "number": "1234" }
        { "response": "1", "number": "1234", "id": "nil" }
    `
    decoder := json.NewDecoder(strings.NewReader(jsonStream))
    for {
        var m AutoGenerated
        if err := decoder.Decode(&m); err == io.EOF {
            break
        } else if err != nil {
            log.Fatal(err)
        }
        fmt.Println(m)
    }
}

该计划的输出是:

{1 1234 <nil>}
{1 1234 nil}