2017-06-05 10 views
0

golangでjsonファイルを読み込もうとしていますが、このエラーが発生しています。 私はそれについてほとんどすべての質問をチェックしましたが、それでもそれを得ることができませんでした。json:main.Posts型のGo値に配列を整列化できません

ここでは例のJSONファイルです: https://jsonplaceholder.typicode.com/posts

そして、私のコード:

package main 

import (
    "net/http" 
    "log" 
    "fmt" 
    "io/ioutil" 
    "encoding/json" 
) 

type Posts struct { 
    Post []struct{ 
     UserId int `json:"userId"` 
     ID int `json:"id"` 
     Title string `json:"title"` 
     Body string `json:"body"` 
    } 
} 

func main(){ 
    resp, err := http.Get("https://jsonplaceholder.typicode.com/posts") 

    if err != nil { 
     log.Fatal(err) 
    } 

    content, _ := ioutil.ReadAll(resp.Body) 

    var posts Posts 

    parsed := json.Unmarshal([]byte(content), &posts) 

    //fmt.Println(string(content)) 

    fmt.Println(parsed) 

} 

答えて

1

記事をポストの配列である構造体が、あなたはそれがあなたの最初の間違いである配列としてのポストを定義し、また、非整列化が戻り、それを得られませんエラーのみを返し、与えられたパラメータを埋めます。

package main 

import (
    "net/http" 
    "log" 
    "fmt" 
    "io/ioutil" 
    "encoding/json" 
) 

type Post struct { 
     UserId int `json:"userId"` 
     ID int `json:"id"` 
     Title string `json:"title"` 
     Body string `json:"body"` 
} 

type Posts []Post 


func main(){ 
    resp, err := http.Get("https://jsonplaceholder.typicode.com/posts") 

    if err != nil { 
     log.Fatal(err) 
    } 

    content, _ := ioutil.ReadAll(resp.Body) 

    var posts Posts 

    err = json.Unmarshal(content, &posts) 

    if err != nil { 
     log.Fatal(err) 
    } 


    fmt.Println(posts[0].Body) 

} 
3

JSONは、そのルートに、配列されていることは。フィールドを配列として含んでいるオブジェクトにアンマーシャリングしようとしています。そのため、JSONが配列のときにオブジェクトを渡したときのエラーです。あなたは同様に、(実際に、またはスライス)の配列を渡したい:

type Post struct { 
    UserId int `json:"userId"` 
    ID int `json:"id"` 
    Title string `json:"title"` 
    Body string `json:"body"` 
} 

//... 

var posts []Post 
err := json.Unmarshal([]byte(content), &posts) 

// Check err, do stuff with posts 
関連する問題