我正在尝试解码我得到的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
答案 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}