https://github.com/mrhwick/partialmarshal
A Go library for JSON marshaling with extra payloads
https://github.com/mrhwick/partialmarshal
Last synced: 28 days ago
JSON representation
A Go library for JSON marshaling with extra payloads
- Host: GitHub
- URL: https://github.com/mrhwick/partialmarshal
- Owner: mrhwick
- License: mit
- Created: 2017-10-19T17:04:05.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2018-07-19T18:47:27.000Z (about 8 years ago)
- Last Synced: 2025-10-30T23:47:08.395Z (9 months ago)
- Language: Go
- Size: 146 KB
- Stars: 1
- Watchers: 8
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# PartialMarshal [](https://godoc.org/github.com/mrhwick/partialmarshal) [](https://travis-ci.org/mrhwick/partialmarshal) [](https://goreportcard.com/report/github.com/mrhwick/partialmarshal)
A Go library for JSON marshaling with extra payloads.
Standard Go JSON marshaling into a struct discards any unmatching fields from the JSON payload. In some use cases, the developer does not want to discard this extra payload data. This library provides a familiar interface for performing marshaling and unmarshaling while keeping any extra data for use by the calling code.
## Install
```bash
go get github.com/mrhwick/partialmarshal
```
## Usage and Examples
Just like the standard library `json` package, `partialmarshal` provides a simple pair of functions for marshaling and unmarshaling of JSON-formatted data into and out of structs.
When a user wants to use partialmarshal to hold onto extra data from a JSON payload, they may simply add the `partialmarshal.Extra` type as an embedded type in their struct. This embedded type is used by the partialmarshal library for storage of any data from the provided JSON that doesn't match a field of that struct.
```go
type Person struct {
Name string
FavoriteFood string `json:"favorite_food"`
partialmarshal.Extra
}
jsonData := []bytes(`{"name": "gopher", "favorite_food": "Pizza", "age": 25}`)
```
```go
// Unmarshaling
// => Person{Name: "gopher", FavoriteFood: "Pizza", partialmarshal.Extra{"age":25}}
var p Person
partialmarshal.Unmarshal(jsonData, &p)
// Marshaling
// => `{"name": "gopher", "favorite_food": "Salad", "age" 25}`
p.FavoriteFood = "Salad"
result, err := partialmarshal.Marshal(p)
```