No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Manejando Modelos y JSON

38/42
Recursos

Aportes 8

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Go tiene un paquete json que sirva para tratar lo relacionado a este formato, codificar, decodificar, etc.

//request.Body: { "email":"[email protected]", "phone":"5524523234" }

// request.Body es tipo io.ReadCloser
decoder := json.NewDecoder(request.Body)

var user User
decoder.Decode(&user)

// user: { Name: Email:[email protected] Phone:5524523234 }

NewDecoder(r io.Reader) genera un decodificador que contiene la información del lector.

Decode(v interface{}) recibe un pointer y vacía los valores que correspondan dentro del decodificador (decoder) con el tipo de estructura al que apunte el pointer. Si el pointer apunta a una variable de tipo interface{} genérica, vacía la información en la variable como map[string]interface.

La función

json.UnMarshal(struct) 

Nos puede ayudar mucho

Ejemplo de Post con curl:

curl -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"name":"Jhonn","phone":"100"}' http://localhost:3000/create

En el minuto 8:11 donde menciona el error, el status de la llamada al endpoint regresa en 200 ok cuando deberia ser un 400 para el manejo del error

package main

import (
	"encoding/json"
	"fmt"
	"net/http"
)

func HandleRoot(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintf(w, "Hola mundo!")
}

func HandleHome(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintf(w, "This is the API Endpoint!")
}

func PostRequest(w http.ResponseWriter, r *http.Request) {
	decoder := json.NewDecoder(r.Body)

	var metadata MetaData
	err := decoder.Decode(&metadata)

	if err != nil {
		fmt.Fprintf(w, "error %v", err)
		return
	}

	fmt.Println(metadata["name"])

	fmt.Fprintf(w,"Payload %v\n", metadata)

}

Aún no tengo muy claro porque envío &metadata por referencia , si recién había declarado la variable metadata. Espero que alguien me pueda contestar. Gracias.