2016-09-22 173 views
-4

我试图解码我得到的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 
+4

'nil'不是有效的JSON值。 –

+0

你是否呼叫恐慌? EOF不是恐慌的原因。 – JimB

+0

我不能忽略这个错误。删除恐慌给我一个新的错误:panic:json:不能将对象解组为字符串的Go值 – Danny

回答

-1

你放在这里的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文件并且不生成该文件。而且他还说这是“零”而不是零。 –

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"` 
}