summaryrefslogtreecommitdiff
path: root/src/pkg/json/struct.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/pkg/json/struct.go')
-rw-r--r--src/pkg/json/struct.go11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/pkg/json/struct.go b/src/pkg/json/struct.go
index 7b50301e4..955ec7c87 100644
--- a/src/pkg/json/struct.go
+++ b/src/pkg/json/struct.go
@@ -366,11 +366,9 @@ func writeStruct(w io.Writer, val *reflect.StructValue) os.Error {
for i := 0; i < val.NumField(); i++ {
fieldValue := val.Field(i)
fmt.Fprintf(w, "%q:", typ.Field(i).Name)
-
if err := writeValue(w, fieldValue); err != nil {
return err
}
-
if i < val.NumField()-1 {
fmt.Fprint(w, ",")
}
@@ -398,14 +396,19 @@ func writeValue(w io.Writer, val reflect.Value) (err os.Error) {
case *reflect.StructValue:
err = writeStruct(w, v)
case *reflect.ChanValue,
- *reflect.PtrValue,
*reflect.UnsafePointerValue:
err = &MarshalError{val.Type()}
case *reflect.InterfaceValue:
if v.IsNil() {
fmt.Fprint(w, "null")
} else {
- err = &MarshalError{val.Type()}
+ err = writeValue(w, v.Elem())
+ }
+ case *reflect.PtrValue:
+ if v.IsNil() {
+ fmt.Fprint(w, "null")
+ } else {
+ err = writeValue(w, v.Elem())
}
default:
value := val.(reflect.Value)