lucassscaravelli / ej

Write and read JSON from different sources in one line

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Easy Json (EJ)

Go Report Card Build Status Coverage Status GoDoc Mentioned in Awesome Go

Package ej implements a JSON handler to write and read json succinctly from different sources like files and http requests.

Install

go get -u github.com/lucassscaravelli/ej

Examples

File

package main

type exData struct {
	Hello int
	World []string
}

func main() {

	dataWrite := &exData{
		Hello: 1,
		World: []string{"h", "e", "l", "l", "o"},
	}

	var dataRead exData
	
	// marshal the content of "dataWrite" to JSON and write in "ex.json" file
	if err := ej.JSON(from.File("ex.json")).Write(&dataWrite); err != nil {
		log.Fatal(err)
	}
	
	// read the data of "ex.json" file and unmarshal the JSON to "dataRead" content
	if err := ej.JSON(from.File("ex.json")).ParseToData(&dataRead); err != nil {
		log.Fatal(err)
	}
	
	// equal content
	fmt.Printf("dataWrite: %+v\n", dataWrite)
	fmt.Printf("dataRead: %+v\n", dataRead)
}

HTTP Request

package main

import (
	"log"
	"net/http"

	"github.com/lucassscaravelil/ej"
	"github.com/lucassscaravelil/ej/from"
)

type requestPayload struct {
	NumberToFind int
	Numbers      []int
}

type responseErrorPayload struct {
	StatusCode int
	ErrorTxt   string
}

type responsePayload struct {
	Found  bool
	Number int
}

func writeError(jsonHandler *ej.EJ, status int, err error) {
	jsonHandler.Write(&responseErrorPayload{
		StatusCode: status,
		ErrorTxt:   err.Error(),
	})
}

func main() {

	http.HandleFunc("/bar", func(w http.ResponseWriter, r *http.Request) {

		var bodyData requestPayload

		jsonHandler := ej.JSON(from.Request(w, r))

		if err := jsonHandler.ParseToData(&bodyData); err != nil {
			writeError(jsonHandler, http.StatusBadRequest, err)
			return
		}

		found := false
		foundNumber := 0

		for _, number := range bodyData.Numbers {
			if number == bodyData.NumberToFind {
				found = true
				foundNumber = number
				break
			}
		}

		jsonHandler.Write(&responsePayload{
			Found:  found,
			Number: foundNumber,
		})

		return
	})

	log.Fatal(http.ListenAndServe(":8080", nil))
}

HTTP Response

package main

import (
	"log"
	"net/http"

	"github.com/lucassscaravelil/ej"
	"github.com/lucassscaravelil/ej/from"
)

type testData struct {
	Count int
	Txt   string
}

func main() {
	var responseData testData
	response, err := http.Get("http://<url>/any")
	if err != nil {
		log.Fatal(err)
	}

	if err := ej.JSON(Response(response)).ParseToData(&responseData); err != nil {
		log.Fatal(err)
	}

	fmt.Printf("dataRead: %+v\n", responseData)
}

About

Write and read JSON from different sources in one line

License:MIT License


Languages

Language:Go 100.0%