Skip to content
This repository was archived by the owner on Dec 15, 2025. It is now read-only.
This repository was archived by the owner on Dec 15, 2025. It is now read-only.

The behavior of json.Unmarshal when encountering field type inconsistencies. #703

@ansionfor

Description

@ansionfor
func TestJson(t *testing.T) {
    type info struct {
       Id int64 `json:"id"`
    }
    type test struct {
       Result []info `json:"result"`
    }
    r := `{"result":[{"id":"1"},{"id":"2"}]}`


    var res1 test
    var res2 test


    // use encoding/json
    json2.Unmarshal([]byte(r), &res1)

    // use json-iterator/go                 
    jsoniter.ConfigCompatibleWithStandardLibrary.Unmarshal([]byte(r), &res2)

    len1 := len(res1.Result)      // 2
    len2 := len(res2.Result)      // 1


    fmt.Println(len1, len2)
}

image

I want to know which handling behavior is more appropriate.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions