Install jsonapi-serializer-go with:
go get -u github.com/jsignanini/jsonapi-serializer-goThen, import it using:
import "github.com/jsignanini/jsonapi-serializer-go"package main import ( "fmt" "github.com/jsignanini/jsonapi-serializer-go" ) func main() { // sample data type ( BookBinding string BookSubject string Author struct { ID string `jsonapi:"primary,authors"` FirstName string `jsonapi:"attribute,first_name"` LastName string `jsonapi:"attribute,last_name"` } Book struct { ISBN string `jsonapi:"primary,books"` Bindings []BookBinding `jsonapi:"attribute,bindings"` PublicationYear int `jsonapi:"attribute,publication_date"` Subject BookSubject `jsonapi:"attribute,subject"` Title string `jsonapi:"attribute,title"` Author *Author `jsonapi:"attribute,author"` } ) const ( BookBindingHardcover BookBinding = "Hardcover" BookBindingPaperback BookBinding = "Paperback" ) cosmos := Book{ ISBN: "0-394-50294-9", Bindings: []BookBinding{BookBindingHardcover, BookBindingPaperback}, PublicationYear: 1980, Subject: "Cosmology", Title: "Cosmos", Author: &Author{ ID: "c3a6ddb6-7e5e-4264-bd03-ef6e41d76365", FirstName: "Carl", LastName: "Sagan", }, } // marshal jsonBytes, err := jsonapi.Marshal(&cosmos, nil) if err != nil { panic(err) } // print output fmt.Println(string(jsonBytes)) }Outputs:
{ "data": { "id": "0-394-50294-9", "type": "books", "attributes": { "author": { "ID": "c3a6ddb6-7e5e-4264-bd03-ef6e41d76365", "FirstName": "Carl", "LastName": "Sagan" }, "bindings": [ "Hardcover", "Paperback" ], "publication_date": 1980, "subject": "Cosmology", "title": "Cosmos" } }, "jsonapi": { "version": "1.0" } }- Optionally validate jsonapi spec
- Optionally set jsonapi settings (e.g.: spec version, error/warning on document validation, etc.)
- Support omitempty tag
jsonapi:"attribute,name,omitempty" - Standardize internal errors
- Show error or warning when parsing an unsupported builtin type (e.g.:
complex128) - Handle top-level Links and resource-level links separatedly