Scharf Beobachtet

Tech Know How

Mit Go einen Request auf eine JSON Datei verarbeiten

2021-10-30 13:57:00

Das ist ja ein Standard in der Web- und Anwendungs-Entwicklung.

Hier einmal in kurz, wie gehabt, schnell mit Code und Befehlen erklärt, wie man einen HTTP Request macht und die Response JSON auf ein Struct mappt.

Zunächst mal die JSON Datei (kann man ja lokal zum Testen auch mit einem der einfachen Webserver aus dieser Seite, PHP oder Python laufen lassen).

Die JSON

{
	"title": "My funky Headline",
	"image_url": "https://www.test.com/funky-article/image.jpg",
	"cta": "https://www.test.com/my-funky-article.html"
}

Ganz klassisch, ein Teaser. Titel, Bild und Url

Nun die Go File, main.go

package main

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

type teaser struct {
	Title     string `json:"title"`
	Url       string `json:"cta"`
	ImageUrl  string `json:"image_url"`
}

func main() {

	url := "http://localhost:8666/teaser.json"

	feedClient := http.Client{
		Timeout: time.Second * 2,
	}
	request, err := http.NewRequest(http.MethodGet, url, nil)

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

	res, getErr := feedClient.Do(request)
	if getErr != nil {
		log.Fatal(getErr)
	}

	if res.Body != nil {
		defer res.Body.Close()
	}

	body, readErr := ioutil.ReadAll(res.Body)
	if readErr != nil {
		log.Fatal(readErr)
	}

	var teas teaser
	jsonErr := json.Unmarshal(body, &teas)
	if jsonErr != nil {
		log.Fatal(jsonErr)
	}

	fmt.Println(teas)
}

Einmal kurz durch den Code geführt:

  • Wir erstellen ein struct, das den Teaser abbildet.
  • Es wird ein Request aufgemacht, um die Url einzulesen und die Response, bzw. den Response-Body zu holen.
  • Daraus wird dann ein JSON Mapping (unmarshal), das die Inhalte auf eine typisierte Variable (teas teaser) mappt.

Zurück