2017-12-11 36 views
0

私は単純なhttpクライアントでGoを使用しています。ここで私は非整列化していたエンティティです:json.Unmarshall()は単一のエンティティで動作しますが、スライスでは動作しません。

type Message struct { 
    Id int64 
    Timestamp int64 
    Text string 
    Author User 
    LastEdited int64 
} 

type User struct { 
    Id int64 
    Name string 
} 

単一のエンティティがJSONで次のようになります。しかし

var m Message 

err = json.Unmarshal(body, &m) 
if err != nil { 
    printerr(err.Error()) 
} 
println(m.Text) 

{ 
    "text": "hello, can you hear me?", 
    "timestamp": 1512964818565, 
    "author": { 
     "name": "andrea", 
     "id": 3 
    }, 
    "lastEdited": null, 
    "id": 8 
} 

ゴー/ jsonのは、単一のエンティティを非整列化問題はありませんエンドポイントの返品が複数のエンティティである場合:

[ 
    { 
     "text": "hello, can you hear me?", 
     "timestamp": 1512964800981, 
     "author": { 
      "name": "eleven", 
      "id": 4 
     }, 
     "lastEdited": null, 
     "id": 7 
    } 
] 

そして、私は構造体のスライス上で動作するように私の対応するアンマーシャルを変更、移動でエラーが発生します:

var m []Message 

err = json.Unmarshal(body, &m) 
if err != nil { 
    printerr(err.Error()) // unexpected end of JSON input 
} 

for i := 0; i < len(m); i++ { 
    println(m[i].Text) 
} 

できますか?

+1

を与えます。それはおそらく閉鎖 "]"とおそらくもっと欠けているでしょう。 –

+0

HTTP応答の読み取りに使用されたコードを表示します。 –

+0

私は単に間違ったURLを要求していて空の応答を得ていた –

答えて

2

私のためにうまく動作します(playgroundで試してください)。どこからペイロードデータを取得していますか?それはそれを切り捨てるような音です。それを実行している

package main 

import (
    "encoding/json" 
    "fmt" 
) 

type Message struct { 
    Id   int64 
    Timestamp int64 
    Text  string 
    Author  User 
    LastEdited int64 
} 

type User struct { 
    Id int64 
    Name string 
} 

func main() { 
    body := []byte(`[ 
    { 
     "text": "hello, can you hear me?", 
     "timestamp": 1512964800981, 
     "author": { 
      "name": "eleven", 
      "id": 4 
     }, 
     "lastEdited": null, 
     "id": 7 
    } 
]`) 

    var m []Message 

    err := json.Unmarshal(body, &m) 
    if err != nil { 
     fmt.Printf("error: %v") // unexpected end of JSON input 
    } 

    for i := 0; i < len(m); i++ { 
     fmt.Println(m[i].Text) 
    } 
} 

はJSONが不正な形式である。この出力に

hello, can you hear me? 
関連する問題