json-iterator/go

Bug: Cannot Unmarshal null fields to UUID

farisekananda opened this issue · 1 comments

Cannot unmarshal null fields to UUID, even though I already uses ConfigCompatibleWithStandardLibrary which ensures 100% compatibility.

It also fails with the NewDecoder.Decode function.

Sample Program:

package main

import (
	"bytes"
	"fmt"

	"encoding/json"

	"github.com/google/uuid"
	jsoniterlib "github.com/json-iterator/go"
)

type TestStruct struct {
	SomeUUID uuid.UUID `json:"someUUID"`
	NilUUID  uuid.UUID `json:"nilUUID"`
}

var jsoniter = jsoniterlib.ConfigCompatibleWithStandardLibrary

func main() {
	fmt.Println("jsoniter fails to decode null field to UUID")
	var err error
	var test TestStruct
	err = jsoniter.Unmarshal(bytes.NewBufferString(`{"someUUID":"fa0e715a-7234-4110-aed0-ecc3de305e62","nilUUID":null}`).Bytes(), &test)
	fmt.Println(test)
	fmt.Println(err)

	fmt.Println("\nexpected results:")
	var err2 error
	var test2 TestStruct
	err2 = json.Unmarshal(bytes.NewBufferString(`{"someUUID":"fa0e715a-7234-4110-aed0-ecc3de305e62","nilUUID":null}`).Bytes(), &test2)
	fmt.Println(test2)
	fmt.Println(err2)
}

Results:

jsoniter fails to decode null field to UUID
{fa0e715a-7234-4110-aed0-ecc3de305e62 00000000-0000-0000-0000-000000000000}
main.TestStruct.NilUUID: textUnmarshalerDecoder: invalid UUID length: 0, error found in #10 byte of ...|UUID":null}|..., bigger context ...|0e715a-7234-4110-aed0-ecc3de305e62","nilUUID":null}|...

expected results:
{fa0e715a-7234-4110-aed0-ecc3de305e62 00000000-0000-0000-0000-000000000000}
<nil>

Ran on golang 1.21.0

@farisekananda I made some checks in my local einvironment (go 1.20.14) with the latest version available for this pkg and no errors have been raised