Parsing JSON in Go
In questo articolo vediamo come eseguire il parsing di un JSON, remoto, in Go.
Useremo anche delle custom struct per incapsulare gli elementi.
Ovviamente la struttura delle struct dipende dal JSON di partenza.
Se avete dubbi, andatevi a vedere il JSON "secco" (potete richiamare l'url direttamente nel browser).
Ecco il codice:
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
type Data []Element
func Unmarshal(data []byte) (Data, error) {
var r Data
err := json.Unmarshal(data, &r)
return r, err
}
func (r *Data) Marshal() ([]byte, error) {
return json.Marshal(r)
}
type Element struct {
UserID int64 `json:"userId"`
ID int64 `json:"id"`
Title string `json:"title"`
Body string `json:"body"`
}
func main() {
url := "https://jsonplaceholder.typicode.com/posts"
resp, err := http.Get(url)
if err != nil {
fmt.Println("No response from request")
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
var result Data
if err := json.Unmarshal(body, &result); err != nil { // Parse []byte to the go struct pointer
fmt.Println(err)
}
for _, rec := range result {
fmt.Println(rec.Title)
}
}
func PrettyPrint(i interface{}) string {
s, _ := json.MarshalIndent(i, "", "t")
return string(s)
}
Il JSON, come top level, è un array.
Ogni record dell'array contiene quei dati.
Enjoy!
go json http
Commentami!