Skip to content

Instantly share code, notes, and snippets.

@senarukana
Created January 19, 2016 02:58
Show Gist options
  • Save senarukana/c3e95063636f067ff557 to your computer and use it in GitHub Desktop.
Save senarukana/c3e95063636f067ff557 to your computer and use it in GitHub Desktop.
golang json encode
package marshal
import (
"bytes"
"encoding/json"
"testing"
)
type MarshalInterface interface {
Example() string
}
type MarshalObject struct {
key string
val string
}
func (m *MarshalObject) Example() string {
return m.key
}
func (m *MarshalObject) MarshalJSON() ([]byte, error) {
data := make(map[string]string)
data["key"] = m.key
data["val"] = m.val
buf := &bytes.Buffer{}
enc := json.NewEncoder(buf)
err := enc.Encode(data)
return buf.Bytes(), err
}
func (m *MarshalObject) UnmarshalJSON(data []byte) error {
marshalData := make(map[string]string)
buf := bytes.NewBuffer(data)
dec := json.NewDecoder(buf)
if err := dec.Decode(&marshalData); err != nil {
return err
}
m.key = marshalData["key"]
m.val = marshalData["val"]
return nil
}
func TestMarshal(t *testing.T) {
var im MarshalInterface
var m MarshalObject
im = &MarshalObject{
key: "Example",
val: "Test",
}
buf := &bytes.Buffer{}
enc := json.NewEncoder(buf)
err := enc.Encode(im)
if err != nil {
t.Fatal(err)
}
dec := json.NewDecoder(buf)
if err = dec.Decode(&m); err != nil {
t.Fatal(err)
}
if m.key != "Example" {
t.Fatal("key error")
}
if m.val != "Test" {
t.Fatal("key error")
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment