-
Notifications
You must be signed in to change notification settings - Fork 53
Open
Description
If a number is passed in string form, I catch a conversion error. I remember exactly that there was no such problem a few months ago, but now this problem has appeared.
package main
import (
jsonStd "encoding/json"
"fmt"
"github.com/segmentio/encoding/json"
)
type eventStd struct {
ID jsonStd.Number `json:"id"`
}
type event struct {
ID json.Number `json:"id"`
}
func main() {
data1 := []byte(`{"id":151}`)
data2 := []byte(`{"id":"151"}`)
var event1, event2 event
err1 := json.Unmarshal(data1, &event1)
err2 := json.Unmarshal(data2, &event2)
fmt.Printf("segmentio:\n%+v, %+v\n", event1, err1)
fmt.Printf("segmentio:\n%+v, %+v\n", event2, err2)
var event3, event4 eventStd
err3 := jsonStd.Unmarshal(data1, &event3)
err4 := jsonStd.Unmarshal(data2, &event4)
fmt.Printf("stdlib:\n%+v, %+v\n", event3, err3)
fmt.Printf("stdlib:\n%+v, %+v\n", event4, err4)
}Output:
segmentio:
{ID:151}, <nil>
segmentio:
{ID:}, json: cannot unmarshal "\"151\"}" into Go struct field main.event.id of type json.Number
stdlib:
{ID:151}, <nil>
stdlib:
{ID:151}, <nil>
This example in executable form https://go.dev/play/p/_ZilgKjQYwL
Metadata
Metadata
Assignees
Labels
No labels