mirror of
https://github.com/golang/go
synced 2024-11-20 04:44:40 -07:00
json package: Fixed handling of nil values
Fixes #400. R=golang-dev, rsc https://golang.org/cl/167058
This commit is contained in:
parent
7d7d95a160
commit
8a5b76ce5c
@ -377,6 +377,11 @@ func writeStruct(w io.Writer, val *reflect.StructValue) os.Error {
|
||||
}
|
||||
|
||||
func writeValue(w io.Writer, val reflect.Value) (err os.Error) {
|
||||
if val == nil {
|
||||
fmt.Fprint(w, "null");
|
||||
return;
|
||||
}
|
||||
|
||||
switch v := val.(type) {
|
||||
case *reflect.StringValue:
|
||||
fmt.Fprintf(w, "%q", v.Get())
|
||||
@ -389,10 +394,15 @@ func writeValue(w io.Writer, val reflect.Value) (err os.Error) {
|
||||
case *reflect.StructValue:
|
||||
err = writeStruct(w, v)
|
||||
case *reflect.ChanValue,
|
||||
*reflect.InterfaceValue,
|
||||
*reflect.PtrValue,
|
||||
*reflect.UnsafePointerValue:
|
||||
err = &MarshalError{val.Type()}
|
||||
case *reflect.InterfaceValue:
|
||||
if v.IsNil() {
|
||||
fmt.Fprint(w, "null")
|
||||
} else {
|
||||
err = &MarshalError{val.Type()}
|
||||
}
|
||||
default:
|
||||
value := val.(reflect.Value);
|
||||
fmt.Fprint(w, value.Interface());
|
||||
|
@ -177,6 +177,7 @@ type marshalTest struct {
|
||||
|
||||
var marshalTests = []marshalTest{
|
||||
// basic string
|
||||
marshalTest{nil, "null"},
|
||||
marshalTest{true, "true"},
|
||||
marshalTest{false, "false"},
|
||||
marshalTest{123, "123"},
|
||||
@ -185,11 +186,14 @@ var marshalTests = []marshalTest{
|
||||
marshalTest{"teststring", `"teststring"`},
|
||||
marshalTest{[4]int{1, 2, 3, 4}, "[1,2,3,4]"},
|
||||
marshalTest{[]int{1, 2, 3, 4}, "[1,2,3,4]"},
|
||||
marshalTest{[]interface{}{nil}, "[null]"},
|
||||
marshalTest{[][]int{[]int{1, 2}, []int{3, 4}}, "[[1,2],[3,4]]"},
|
||||
marshalTest{map[string]string{"one": "one"}, `{"one":"one"}`},
|
||||
marshalTest{map[string]int{"one": 1}, `{"one":1}`},
|
||||
marshalTest{map[string]interface{}{"null": nil}, `{"null":null}`},
|
||||
marshalTest{struct{}{}, "{}"},
|
||||
marshalTest{struct{ a int }{1}, `{"a":1}`},
|
||||
marshalTest{struct{ a interface{} }{nil}, `{"a":null}`},
|
||||
marshalTest{struct {
|
||||
a int;
|
||||
b string;
|
||||
|
Loading…
Reference in New Issue
Block a user