mirror of
https://github.com/golang/go
synced 2024-11-11 19:51:37 -07:00
encoding/json: make Number with the ,string option marshal with quotes
Add quotes when marshaling a json.Number with the string option
set via a struct tag. This ensures that the resulting json
can be unmarshaled into the source struct without error.
Fixes #34268
Change-Id: Ide167d9dec77019554870b5957b37dc258119d81
GitHub-Last-Rev: dde81b7120
GitHub-Pull-Request: golang/go#34269
Reviewed-on: https://go-review.googlesource.com/c/go/+/195043
Reviewed-by: Daniel Martí <mvdan@mvdan.cc>
Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
d9b8ffa51c
commit
49e7c7672d
@ -600,7 +600,13 @@ func stringEncoder(e *encodeState, v reflect.Value, opts encOpts) {
|
||||
if !isValidNumber(numStr) {
|
||||
e.error(fmt.Errorf("json: invalid number literal %q", numStr))
|
||||
}
|
||||
if opts.quoted {
|
||||
e.WriteByte('"')
|
||||
}
|
||||
e.WriteString(numStr)
|
||||
if opts.quoted {
|
||||
e.WriteByte('"')
|
||||
}
|
||||
return
|
||||
}
|
||||
if opts.quoted {
|
||||
|
@ -76,13 +76,15 @@ type StringTag struct {
|
||||
IntStr int64 `json:",string"`
|
||||
UintptrStr uintptr `json:",string"`
|
||||
StrStr string `json:",string"`
|
||||
NumberStr Number `json:",string"`
|
||||
}
|
||||
|
||||
var stringTagExpected = `{
|
||||
"BoolStr": "true",
|
||||
"IntStr": "42",
|
||||
"UintptrStr": "44",
|
||||
"StrStr": "\"xzbit\""
|
||||
"StrStr": "\"xzbit\"",
|
||||
"NumberStr": "46"
|
||||
}`
|
||||
|
||||
func TestStringTag(t *testing.T) {
|
||||
@ -91,6 +93,7 @@ func TestStringTag(t *testing.T) {
|
||||
s.IntStr = 42
|
||||
s.UintptrStr = 44
|
||||
s.StrStr = "xzbit"
|
||||
s.NumberStr = "46"
|
||||
got, err := MarshalIndent(&s, "", " ")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
|
Loading…
Reference in New Issue
Block a user