https://github.com/jsignanini/jsonapi-serializer-go
JSON:API serializer and deserializer.
https://github.com/jsignanini/jsonapi-serializer-go
jsonapi jsonapi-serializer
Last synced: 4 months ago
JSON representation
JSON:API serializer and deserializer.
- Host: GitHub
- URL: https://github.com/jsignanini/jsonapi-serializer-go
- Owner: jsignanini
- License: mit
- Created: 2019-12-07T07:30:14.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2020-09-25T13:49:40.000Z (over 5 years ago)
- Last Synced: 2024-06-20T12:01:48.504Z (almost 2 years ago)
- Topics: jsonapi, jsonapi-serializer
- Language: Go
- Homepage: https://jsonapi.org/
- Size: 76.2 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# jsonapi-serializer-go
[](http://godoc.org/github.com/jsignanini/jsonapi-serializer-go)
[](https://travis-ci.org/jsignanini/jsonapi-serializer-go)
[](https://goreportcard.com/report/github.com/jsignanini/jsonapi-serializer-go)
[](https://coveralls.io/github/jsignanini/jsonapi-serializer-go?branch=master)
## Installation
Install jsonapi-serializer-go with:
```sh
go get -u github.com/jsignanini/jsonapi-serializer-go
```
Then, import it using:
```go
import "github.com/jsignanini/jsonapi-serializer-go"
```
## Usage
```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:
```json
{
"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"
}
}
```
## TODOs
- 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