diff options
| author | Ondřej Surý <ondrej@sury.org> | 2011-04-26 09:55:32 +0200 | 
|---|---|---|
| committer | Ondřej Surý <ondrej@sury.org> | 2011-04-26 09:55:32 +0200 | 
| commit | 7b15ed9ef455b6b66c6b376898a88aef5d6a9970 (patch) | |
| tree | 3ef530baa80cdf29436ba981f5783be6b4d2202b /src/pkg/json/encode.go | |
| parent | 50104cc32a498f7517a51c8dc93106c51c7a54b4 (diff) | |
| download | golang-7b15ed9ef455b6b66c6b376898a88aef5d6a9970.tar.gz | |
Imported Upstream version 2011.04.13upstream/2011.04.13
Diffstat (limited to 'src/pkg/json/encode.go')
| -rw-r--r-- | src/pkg/json/encode.go | 46 | 
1 files changed, 23 insertions, 23 deletions
| diff --git a/src/pkg/json/encode.go b/src/pkg/json/encode.go index 26ce47039..dfa3c59da 100644 --- a/src/pkg/json/encode.go +++ b/src/pkg/json/encode.go @@ -183,7 +183,7 @@ func (e *encodeState) error(err os.Error) {  var byteSliceType = reflect.Typeof([]byte(nil))  func (e *encodeState) reflectValue(v reflect.Value) { -	if v == nil { +	if !v.IsValid() {  		e.WriteString("null")  		return  	} @@ -200,30 +200,30 @@ func (e *encodeState) reflectValue(v reflect.Value) {  		return  	} -	switch v := v.(type) { -	case *reflect.BoolValue: -		x := v.Get() +	switch v.Kind() { +	case reflect.Bool: +		x := v.Bool()  		if x {  			e.WriteString("true")  		} else {  			e.WriteString("false")  		} -	case *reflect.IntValue: -		e.WriteString(strconv.Itoa64(v.Get())) +	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: +		e.WriteString(strconv.Itoa64(v.Int())) -	case *reflect.UintValue: -		e.WriteString(strconv.Uitoa64(v.Get())) +	case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: +		e.WriteString(strconv.Uitoa64(v.Uint())) -	case *reflect.FloatValue: -		e.WriteString(strconv.FtoaN(v.Get(), 'g', -1, v.Type().Bits())) +	case reflect.Float32, reflect.Float64: +		e.WriteString(strconv.FtoaN(v.Float(), 'g', -1, v.Type().Bits())) -	case *reflect.StringValue: -		e.string(v.Get()) +	case reflect.String: +		e.string(v.String()) -	case *reflect.StructValue: +	case reflect.Struct:  		e.WriteByte('{') -		t := v.Type().(*reflect.StructType) +		t := v.Type()  		n := v.NumField()  		first := true  		for i := 0; i < n; i++ { @@ -246,8 +246,8 @@ func (e *encodeState) reflectValue(v reflect.Value) {  		}  		e.WriteByte('}') -	case *reflect.MapValue: -		if _, ok := v.Type().(*reflect.MapType).Key().(*reflect.StringType); !ok { +	case reflect.Map: +		if v.Type().Key().Kind() != reflect.String {  			e.error(&UnsupportedTypeError{v.Type()})  		}  		if v.IsNil() { @@ -255,19 +255,19 @@ func (e *encodeState) reflectValue(v reflect.Value) {  			break  		}  		e.WriteByte('{') -		var sv stringValues = v.Keys() +		var sv stringValues = v.MapKeys()  		sort.Sort(sv)  		for i, k := range sv {  			if i > 0 {  				e.WriteByte(',')  			} -			e.string(k.(*reflect.StringValue).Get()) +			e.string(k.String())  			e.WriteByte(':') -			e.reflectValue(v.Elem(k)) +			e.reflectValue(v.MapIndex(k))  		}  		e.WriteByte('}') -	case reflect.ArrayOrSliceValue: +	case reflect.Array, reflect.Slice:  		if v.Type() == byteSliceType {  			e.WriteByte('"')  			s := v.Interface().([]byte) @@ -292,11 +292,11 @@ func (e *encodeState) reflectValue(v reflect.Value) {  			if i > 0 {  				e.WriteByte(',')  			} -			e.reflectValue(v.Elem(i)) +			e.reflectValue(v.Index(i))  		}  		e.WriteByte(']') -	case interfaceOrPtrValue: +	case reflect.Interface, reflect.Ptr:  		if v.IsNil() {  			e.WriteString("null")  			return @@ -328,7 +328,7 @@ type stringValues []reflect.Value  func (sv stringValues) Len() int           { return len(sv) }  func (sv stringValues) Swap(i, j int)      { sv[i], sv[j] = sv[j], sv[i] }  func (sv stringValues) Less(i, j int) bool { return sv.get(i) < sv.get(j) } -func (sv stringValues) get(i int) string   { return sv[i].(*reflect.StringValue).Get() } +func (sv stringValues) get(i int) string   { return sv[i].String() }  func (e *encodeState) string(s string) {  	e.WriteByte('"') | 
