43 lines
841 B
Go
43 lines
841 B
Go
|
package json
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
)
|
||
|
|
||
|
// Object represents the encoding of a JSON Object type
|
||
|
type Object struct {
|
||
|
w *bytes.Buffer
|
||
|
writeComma bool
|
||
|
scratch *[]byte
|
||
|
}
|
||
|
|
||
|
func newObject(w *bytes.Buffer, scratch *[]byte) *Object {
|
||
|
w.WriteRune(leftBrace)
|
||
|
return &Object{w: w, scratch: scratch}
|
||
|
}
|
||
|
|
||
|
func (o *Object) writeKey(key string) {
|
||
|
o.w.WriteRune(quote)
|
||
|
o.w.Write([]byte(key))
|
||
|
o.w.WriteRune(quote)
|
||
|
o.w.WriteRune(colon)
|
||
|
}
|
||
|
|
||
|
// Key adds the given named key to the JSON object.
|
||
|
// Returns a Value encoder that should be used to encode
|
||
|
// a JSON value type.
|
||
|
func (o *Object) Key(name string) Value {
|
||
|
if o.writeComma {
|
||
|
o.w.WriteRune(comma)
|
||
|
} else {
|
||
|
o.writeComma = true
|
||
|
}
|
||
|
o.writeKey(name)
|
||
|
return newValue(o.w, o.scratch)
|
||
|
}
|
||
|
|
||
|
// Close encodes the end of the JSON Object
|
||
|
func (o *Object) Close() {
|
||
|
o.w.WriteRune(rightBrace)
|
||
|
}
|