func (a *Array) Push(val Value) {
	if !a.empty {
		_, _ = a.cs.w.Write([]byte(","))
	} else {
		a.empty = false
	}
	handleValue(*a.cs, val)
}
Push pushes an item into the array
package chanson
import (
	"encoding/json"
	"io"
	"strconv"
)
type Chanson struct {
	w   io.Writer
	enc *json.Encoder
}
type Value interface{}
func New(w io.Writer) Chanson {
	cs := Chanson{
		w:   w,
		enc: json.NewEncoder(w),
	}
	return cs
}
func (cs Chanson) Object(f func(Object)) {
	_, _ = cs.w.Write([]byte("{"))
	if f != nil {
		f(Object{cs: &cs, empty: true})
	}
	_, _ = cs.w.Write([]byte("}"))
}
func (cs Chanson) Array(f func(Array)) {
	_, _ = cs.w.Write([]byte("["))
	if f != nil {
		f(newArray(&cs))
	}
	_, _ = cs.w.Write([]byte("]"))
}
type Object struct {
	cs    *Chanson
	empty bool
}
func (obj *Object) Set(key string, val Value) {
	if !obj.empty {
		_, _ = obj.cs.w.Write([]byte(","))
	} else {
		obj.empty = false
	}
	_, _ = obj.cs.w.Write([]byte(strconv.Quote(key)))
	_, _ = obj.cs.w.Write([]byte(":"))
	handleValue(*obj.cs, val)
}
type Array struct {
	cs    *Chanson
	empty bool
}
func newArray(cs *Chanson) Array {
	return Array{cs: cs, empty: true}
}