When using JSONRPC, do not double-encode JSON.

This commit is contained in:
Jae Kwon
2015-03-30 15:14:33 -07:00
parent ffa82b5c61
commit 1a4aab4c35
6 changed files with 39 additions and 88 deletions

View File

@ -25,19 +25,23 @@ func WriteBinary(o interface{}, w io.Writer, n *int64, err *error) {
}
func ReadJSON(o interface{}, bytes []byte, err *error) interface{} {
var parsed interface{}
*err = json.Unmarshal(bytes, &parsed)
var object interface{}
*err = json.Unmarshal(bytes, &object)
if *err != nil {
return o
}
return ReadJSONFromObject(o, object, err)
}
func ReadJSONFromObject(o interface{}, object interface{}, err *error) interface{} {
rv, rt := reflect.ValueOf(o), reflect.TypeOf(o)
if rv.Kind() == reflect.Ptr {
readReflectJSON(rv.Elem(), rt.Elem(), parsed, err)
readReflectJSON(rv.Elem(), rt.Elem(), object, err)
return o
} else {
ptrRv := reflect.New(rt)
readReflectJSON(ptrRv.Elem(), rt, parsed, err)
readReflectJSON(ptrRv.Elem(), rt, object, err)
return ptrRv.Elem().Interface()
}
}