2016-09-22 11 views
-4

json을 디코딩하려고합니다. 여기에 내가 얻을 예 JSON의 :EOF 패닉 오류 받기

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

가 여기 내 구조체입니다 : 내가 인코딩/JSON의 디코드 기능을 사용

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

. 나는 무엇이 잘못 되었는가? ID는 문자열 또는 nil 값이 될 수 있습니다.

정확한 오류는 도움이됩니다.

panic: EOF 
+4

'nil'은 (는) 유효한 JSON 값이 아닙니다. –

+0

당신은 당황하고 있습니까? EOF는 공황에 대한 이유가 아닙니다. – JimB

+0

나는 그 오류를 무시할 수 없다. 패닉을 제거하면 다음과 같은 새로운 오류가 발생합니다. panic : json : 객체를 unmarshal 할 수 없습니다. string 유형의 Go 값 – Danny

답변

-1

여기에 입력 한 JSON 문자열이 유효하지 않습니다. 참고로 this code sample을 (를) 찾을 수 있습니다.

은 그냥 JSON 문자열에 넣어하지 않습니다 전무ID 필드를 설정하는 거라면.

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