func (js *JSON) Set(args ...interface{}) error {
	js.maybeInit()
	if len(args) < 2 {
		return errors.New("rs must contain a path and value")
	}
	v := args[len(args)-1]
	key, ok := args[len(args)-2].(string)
	if !ok {
		return errors.New("all args except last must be strings")
	}
	j := js.json
	for _, p := range args[:len(args)-2] {
		strp, ok := p.(string)
		if !ok {
			return errors.New("all args except last must be strings")
		}
		newj, ok := j.CheckGet(strp)
		if !ok {
			j.Set(strp, make(map[string]interface{}))
			j = j.Get(strp)
		} else {
			j = newj
		}
	}
	j.Set(key, v)
	return nil
}
Sets a JSON value not represented in the struct type.  The
argument list is a set of strings referring to the JSON path,
with the value to be set as the last value.

Example:

// This sets {"Phone": {"Mobile": "614-555-1212"}} in the JSON
p.Set("Phone", "Mobile", "614-555-1212")
package lossless
import (
	"encoding/json"
	"errors"
	"reflect"
	"strings"
	"github.com/bitly/go-simplejson"
)
type JSON struct {
	json *simplejson.Json
}
func (js *JSON) maybeInit() {
	if js.json == nil {
		js.json, _ = simplejson.NewJson([]byte("{}"))
	}
}