Parsing JSON in Go

Mattepuffo's logo
Parsing JSON in Go

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!


Condividi

Commentami!