json

package module
v0.1.5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 26, 2020 License: ISC Imports: 8 Imported by: 1

README

json

GitHub tag (latest SemVer) PkgGoDev Go Report Card

Low level, caller-driven JSON builder and parser

Example:

import (
  "fmt"
  "github.com/rsms/go-json"
)

func ExampleBuilder() {
  var b json.Builder
  b.Indent = "  " // enable pretty-printing

  b.StartObject()
    b.Key("subject")
    b.Str("Fun")

    b.Key("labels")
    b.StartArray()
      b.Str("casual")
      b.Str("message")
    b.EndArray()

    // Add base-64 encoded data
    data := []byte("hello world")
    b.StartObjectProp("attachment")
      b.IntProp("size", int64(len(data)), 64)
      b.StrProp("type", "text/plain")
      b.BlobProp("data", data)
    b.EndObject()

    b.BoolProp("isUnread", true)
    b.FloatProp("score", 0.41, 64)
  b.EndObject()

  fmt.Println(string(b.Bytes()))
  // Output:
  // {
  //   "subject": "Fun",
  //   "labels": [
  //     "casual",
  //     "message"
  //   ],
  //   "attachment": {
  //     "size": "11",
  //     "type": "text/plain",
  //     "data": "aGVsbG8gd29ybGQ"
  //   },
  //   "isUnread": true,
  //   "score": 0.41
  // }
}

Documentation

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Builder

type Builder struct {
	bytes.Buffer // output JSON

	// Err holds the first error encountered, if any
	Err error

	// pretty-printing
	Indent  string
	KeyTerm []byte // key terminator. Defaults to ":"
	// contains filtered or unexported fields
}

Builder is a low-level JSON builder with a caller-driven API. It can generatet both compact JSON as well as pretty-printed output with almost zero overhead.

Example
package main

import (
	// "testing"
	"fmt"
	"time"
)

type ExampleVec3 struct {
	x, y, z float64
}

func (v ExampleVec3) BuildJSON(b *Builder) {
	b.StartArray()
	b.Float(v.x, 64)
	b.Float(v.y, 64)
	b.Float(v.z, 64)
	b.EndArray()
}

func main() {
	var b Builder
	b.Indent = "  " // enable pretty-printing

	b.StartObject()
	b.Key("subject")
	b.Str("Fun")

	b.Key("labels")
	b.StartArray()
	b.Str("casual")
	b.Str("message")
	b.EndArray()

	// Add base-64 encoded data
	// data, _ := ioutil.ReadFile("builder_test.go")
	data := []byte("hello world")
	b.StartObjectProp("attachment")
	b.IntProp("size", int64(len(data)), 64)
	b.StrProp("type", "text/plain")
	b.BlobProp("data", data)
	b.EndObject()

	b.BoolProp("isUnread", true)
	b.FloatProp("score", 0.41, 64)

	b.AnyProp("any.bool", true)
	b.AnyProp("any.int8", int8(123))
	b.AnyProp("any.uint8", uint8(123))
	b.AnyProp("any.int16", int16(123))
	b.AnyProp("any.uint16", uint16(123))
	b.AnyProp("any.int32", int32(123))
	b.AnyProp("any.uint32", uint32(123))
	b.AnyProp("any.int64", int64(123))
	b.AnyProp("any.uint64", uint64(123))
	b.AnyProp("any.float32", float32(1.23))
	b.AnyProp("any.float64", float64(1.23))
	b.AnyProp("any.string", "ett två tre")
	b.AnyProp("any.blob", []byte("un dos tres"))
	b.AnyProp("any.time", time.Unix(123, 0)) // uses MarshalJSON or encoding/json.Encoder
	b.AnyProp("any.vec3", ExampleVec3{1.2, 3.4, 5.6})

	b.EndObject()

	fmt.Println(string(b.Bytes()))
}
Output:

{
  "subject": "Fun",
  "labels": [
    "casual",
    "message"
  ],
  "attachment": {
    "size": "11",
    "type": "text/plain",
    "data": "aGVsbG8gd29ybGQ"
  },
  "isUnread": true,
  "score": 0.41,
  "any.bool": true,
  "any.int8": 123,
  "any.uint8": 123,
  "any.int16": 123,
  "any.uint16": 123,
  "any.int32": 123,
  "any.uint32": 123,
  "any.int64": "123",
  "any.uint64": "123",
  "any.float32": 1.23,
  "any.float64": 1.23,
  "any.string": "ett två tre",
  "any.blob": "dW4gZG9zIHRyZXM",
  "any.time": "1969-12-31T16:02:03-08:00",
  "any.vec3": [
    1.2,
    3.4,
    5.6
  ]
}

func (*Builder) Any added in v0.1.4

func (e *Builder) Any(v interface{})

func (*Builder) AnyProp added in v0.1.4

func (e *Builder) AnyProp(k string, v interface{})

func (*Builder) Blob

func (e *Builder) Blob(data []byte)

func (*Builder) BlobProp

func (e *Builder) BlobProp(k string, v []byte)

func (*Builder) Bool

func (e *Builder) Bool(v bool)

func (*Builder) BoolProp

func (e *Builder) BoolProp(k string, v bool)

func (*Builder) End

func (e *Builder) End(kind byte)

End a dictionary (kind='}') or list (kind=']') If the builder is not inside an object, this method panics.

func (*Builder) EndArray

func (e *Builder) EndArray()

EndArray ends a dictionary. Equivalent to End(']')

func (*Builder) EndObject

func (e *Builder) EndObject()

EndObject ends a dictionary. Equivalent to End('}')

func (*Builder) Float

func (e *Builder) Float(f float64, bits int)

Float writes a float64 number of bits size

func (*Builder) FloatProp

func (e *Builder) FloatProp(k string, f float64, bits int)

func (*Builder) InObject

func (e *Builder) InObject() bool

InObject returns true if EndObject can be safely called

func (*Builder) Int

func (e *Builder) Int(v int64, bitsize int)

func (*Builder) IntProp

func (e *Builder) IntProp(k string, v int64, bitsize int)

func (*Builder) Key

func (e *Builder) Key(k string)

Key writes `"k":`

func (*Builder) KeyBytes

func (e *Builder) KeyBytes(k []byte)

KeyBytes writes `"k":`

func (*Builder) Null

func (e *Builder) Null()

func (*Builder) NullProp

func (e *Builder) NullProp(k string)

func (*Builder) Raw

func (e *Builder) Raw(b []byte)

func (*Builder) RawKey added in v0.1.2

func (e *Builder) RawKey(k []byte)

RawKey writes k verbatim without quotes and without escaping. Thus, k is expected to be a valid JSON key already.

func (*Builder) Reset

func (e *Builder) Reset()

Reset resets the Builder so it can be reused. Does not reset Indent. If the ByteWriter has a Reset() method, that method is called as well, which is the case when the default bytes.Buffer is being used.

func (*Builder) Start

func (e *Builder) Start(kind byte)

Start a dictionary (kind='{') or list (kind='[')

func (*Builder) StartArray

func (e *Builder) StartArray()

StartArray starts a dictionary. Equivalent to Start('[')

func (*Builder) StartArrayProp

func (e *Builder) StartArrayProp(k string)

func (*Builder) StartObject

func (e *Builder) StartObject()

StartObject starts a dictionary. Equivalent to Start('{')

func (*Builder) StartObjectProp

func (e *Builder) StartObjectProp(k string)

func (*Builder) Str

func (e *Builder) Str(s string)

func (*Builder) StrBytes

func (e *Builder) StrBytes(s []byte)

func (*Builder) StrProp

func (e *Builder) StrProp(k, v string)

func (*Builder) Uint

func (e *Builder) Uint(v uint64, bitsize int)

func (*Builder) UintProp

func (e *Builder) UintProp(k string, v uint64, bitsize int)

func (*Builder) WriteJsonString

func (e *Builder) WriteJsonString(s []byte)

WriteJsonString writes a string, quoting and escaping it as needed. This is a lower-level primitive; it's not aware of indentation, commas, etc.

type Reader

type Reader struct {
	// contains filtered or unexported fields
}

func NewReader

func NewReader(data []byte) *Reader

func (*Reader) ArrayStart

func (c *Reader) ArrayStart() bool

func (*Reader) Blob

func (c *Reader) Blob() []byte

func (*Reader) Bool

func (c *Reader) Bool() bool

func (*Reader) Discard

func (c *Reader) Discard()

Discard the next value

func (*Reader) Err

func (c *Reader) Err() error

func (*Reader) Float

func (c *Reader) Float(bitsize int) float64

func (*Reader) Int

func (c *Reader) Int(bitsize int) int64

func (*Reader) Key

func (c *Reader) Key() string

func (*Reader) More

func (c *Reader) More() bool

func (*Reader) ObjectStart

func (c *Reader) ObjectStart() bool

func (*Reader) Reset

func (c *Reader) Reset(r io.Reader)

func (*Reader) ResetBytes

func (c *Reader) ResetBytes(data []byte)

func (*Reader) Str

func (c *Reader) Str() string

func (*Reader) Uint

func (c *Reader) Uint(bitsize int) uint64

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL