1
0
mirror of https://github.com/golang/go synced 2024-11-19 15:44:44 -07:00

encoding/json: permit encoding uintptr as a string

Fixes #22629

Change-Id: I31e85f9faa125ee0dfd6d3c5fa89334b00d61e6e
Reviewed-on: https://go-review.googlesource.com/76530
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Emmanuel Odeke <emm.odeke@gmail.com>
Reviewed-by: Joe Tsai <joetsai@google.com>
This commit is contained in:
Ian Lance Taylor 2017-11-08 07:16:07 -08:00 committed by Joe Tsai
parent 65a864a628
commit ed3d672766
3 changed files with 30 additions and 23 deletions

View File

@ -1194,6 +1194,7 @@ type All struct {
Foo2 string `json:"bar2,dummyopt"`
IntStr int64 `json:",string"`
UintptrStr uintptr `json:",string"`
PBool *bool
PInt *int
@ -1264,6 +1265,7 @@ var allValue = All{
Foo: "foo",
Foo2: "foo2",
IntStr: 42,
UintptrStr: 44,
String: "16",
Map: map[string]Small{
"17": {Tag: "tag17"},
@ -1326,6 +1328,7 @@ var allValueIndent = `{
"bar": "foo",
"bar2": "foo2",
"IntStr": "42",
"UintptrStr": "44",
"PBool": null,
"PInt": null,
"PInt8": null,
@ -1418,6 +1421,7 @@ var pallValueIndent = `{
"bar": "",
"bar2": "",
"IntStr": "0",
"UintptrStr": "0",
"PBool": true,
"PInt": 2,
"PInt8": 3,

View File

@ -1131,7 +1131,7 @@ func typeFields(t reflect.Type) []field {
switch ft.Kind() {
case reflect.Bool,
reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64,
reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64,
reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr,
reflect.Float32, reflect.Float64,
reflect.String:
quoted = true

View File

@ -73,12 +73,14 @@ func TestOmitEmpty(t *testing.T) {
type StringTag struct {
BoolStr bool `json:",string"`
IntStr int64 `json:",string"`
UintptrStr uintptr `json:",string"`
StrStr string `json:",string"`
}
var stringTagExpected = `{
"BoolStr": "true",
"IntStr": "42",
"UintptrStr": "44",
"StrStr": "\"xzbit\""
}`
@ -86,6 +88,7 @@ func TestStringTag(t *testing.T) {
var s StringTag
s.BoolStr = true
s.IntStr = 42
s.UintptrStr = 44
s.StrStr = "xzbit"
got, err := MarshalIndent(&s, "", " ")
if err != nil {