2017-11-15 22 views
-4

json 데이터를 비 정렬 화하려고합니다. 이 때문에 슬라이스는 내부 따옴표없이 의도적으로 무엇을 내가 메시지 구조체로 (\ 전에 수동으로 추가 ")golang에서 json 내부 슬라이스를 파싱하는 방법은 무엇입니까?

data:="{\"queryEndTime\" : \"2017-11-15T14:39:00Z\", \"message\" : [{\"spamScore\":67,\"phishScore\":0}]}" 

HTTPS에서 점점 오전 :

type Message struct { 
    QueryEndTime string `json:"queryEndTime"` 
    Message []string `json:"message"` 

} 

하지만 올바른 QueryEndTime 빈을 얻고있다 메시지. 나는 메시지 유형을 변경하려고했지만 항상

var message Message 
json.Unmarshal([]byte(data), &message) 
fmt.Printf("QueryEndTime: %s\nMessage: %s\n", message.QueryEndTime, message.Message) 
QueryEndTime: 2017-11-15T14:39:00Z 
Message: [] 

이 이동 놀이터 https://play.golang.org/p/on0_cSKb0c에 참조 빈 유지됩니다.

+4

"조각에 따옴표가 없음"이란 무엇을 의미합니까? 단일 객체를 가진 json 배열이 있습니다. 그것은 문자열의 조각으로 비 정렬화할 수 없습니다. – JimB

+2

json의 메시지는 "따옴표가없는"문자열이 아닌 객체입니다. – mkopriva

+5

"[놀이터 (Go Playground)] (https://play.golang.org/p/VZ8hoZbU3Y)와 같은 오류 메시지를 확인하기에"친절 "한 경우, 실패한 이유를 알 수 있습니다 : _"json : 개체를 구조체 필드로 이동시킬 수 없습니다. 형식 문자열의 Message.message "_. 오류를 절대로 누락시키지 마십시오. – icza

답변

2
package main 

import (
    "encoding/json" 
    "fmt" 
) 

type Message struct { 
    QueryEndTime string `json:"queryEndTime"` 

    // you need to use a struct can use anon struct 
    Message  []struct { 
     SpamScore int `json:"spamScore"` 
     PhishScore int `json:"phishScore"` 
    } `json:"message"` 

} 

func main() { 
    var message Message 

    // You can use backticks to for your example JSON, so that you don't have to escape anything. 
    data := `{ 
     "queryEndTime" : "2017-11-15T14:39:00Z", 
     "message" : [ 
      {"spamScore":67, "phishScore":0} 
     ] 
    }` 

    // please check for errors 
    err := json.Unmarshal([]byte(data), &message) 
    if err != nil { 
     fmt.Println(err) 
    } 

    // +v prints structs very nicely 
    fmt.Printf("%+v\n", message) 
} 

https://play.golang.org/p/Mu3WZCej3L

재밌게!

+0

많이 감사합니다, Volker가 처음이라고 생각합니다. – irom