From 35c32cc6427752d1ac39329936ba39f39a8c9720 Mon Sep 17 00:00:00 2001 From: Nikolay Date: Fri, 24 Jul 2020 13:33:00 +0800 Subject: [PATCH] fixed null in number json tag string --- go.sum | 1 + reflect_struct_decoder.go | 5 +++++ value_tests/struct_test.go | 5 +++++ 3 files changed, 11 insertions(+) diff --git a/go.sum b/go.sum index d778b5a1..be00a6df 100644 --- a/go.sum +++ b/go.sum @@ -9,6 +9,7 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 h1:Esafd1046DLD github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= diff --git a/reflect_struct_decoder.go b/reflect_struct_decoder.go index d7eb0eb5..92ae912d 100644 --- a/reflect_struct_decoder.go +++ b/reflect_struct_decoder.go @@ -1075,6 +1075,11 @@ type stringModeNumberDecoder struct { } func (decoder *stringModeNumberDecoder) Decode(ptr unsafe.Pointer, iter *Iterator) { + if iter.WhatIsNext() == NilValue { + decoder.elemDecoder.Decode(ptr, iter) + return + } + c := iter.nextToken() if c != '"' { iter.ReportError("stringModeNumberDecoder", `expect ", but found `+string([]byte{c})) diff --git a/value_tests/struct_test.go b/value_tests/struct_test.go index 7900baae..181e12fc 100644 --- a/value_tests/struct_test.go +++ b/value_tests/struct_test.go @@ -26,6 +26,11 @@ func init() { Field int `json:"field"` })(nil), input: `{"field": null}`, + }, unmarshalCase{ + ptr: (*struct { + Field int `json:"field,string"` + })(nil), + input: `{"field": null}`, }, unmarshalCase{ ptr: (*struct { ID int `json:"id"`