收到EOF恐慌错误
问题描述:
我试图解码我得到的json。这里有一个例子JSON我得到:收到EOF恐慌错误
{"response":"1","number":"1234","id":nil}
这里是我的结构:
type AutoGenerated struct {
Response string `json:"response"`
Number string `json:"number"`
ID interface{} `json:"id"`
}
我用的解码功能编码/ JSON。我错了什么? ID有机会成为一个字符串或零值。
下面是我确切的错误,它帮助。
panic: EOF
答
你放在这里的JSON字符串是无效的。你可以找到this code sample作为参考。
如果你打算到ID字段设置为零,只是不把它放在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}
+1
检查他对这个问题的评论。他正在接收JSON文件并且不生成该文件。而且他还说这是“零”而不是零。 –
答
没有你显示你是如何做的,我认为最好的答案是你如何做到这一点。
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"`
}
'nil'不是有效的JSON值。 –
你是否呼叫恐慌? EOF不是恐慌的原因。 – JimB
我不能忽略这个错误。删除恐慌给我一个新的错误:panic:json:不能将对象解组为字符串的Go值 – Danny