2017-11-15 13 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

エラーメッセージ(「Play Playground」(https://play.golang.org/p/VZ8hoZbU3Y))のような「kind」であれば、それが失敗する理由がわかります:_ "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

関連する問題