mirror of
https://github.com/json-iterator/go.git
synced 2025-04-01 21:24:21 +02:00
The array encoder assumed that arrays had at least one value, so it would serialize them with a zero-value for the array, such as `[0]`. This adds a test to reproduce the issue, and updates the encoder to write an empty array if the length is 0.
47 lines
1.2 KiB
Go
47 lines
1.2 KiB
Go
package jsoniter
|
|
|
|
import (
|
|
"encoding/json"
|
|
"github.com/stretchr/testify/require"
|
|
"testing"
|
|
)
|
|
|
|
func Test_encode_fixed_array(t *testing.T) {
|
|
should := require.New(t)
|
|
type FixedArray [2]float64
|
|
fixed := FixedArray{0.1, 1.0}
|
|
output, err := MarshalToString(fixed)
|
|
should.Nil(err)
|
|
should.Equal("[0.1,1]", output)
|
|
}
|
|
|
|
func Test_encode_fixed_array_empty(t *testing.T) {
|
|
should := require.New(t)
|
|
type FixedArray [0]float64
|
|
fixed := FixedArray{}
|
|
output, err := MarshalToString(fixed)
|
|
should.Nil(err)
|
|
should.Equal("[]", output)
|
|
}
|
|
|
|
func Test_encode_fixed_array_of_map(t *testing.T) {
|
|
should := require.New(t)
|
|
type FixedArray [2]map[string]string
|
|
fixed := FixedArray{map[string]string{"1": "2"}, map[string]string{"3": "4"}}
|
|
output, err := MarshalToString(fixed)
|
|
should.Nil(err)
|
|
should.Equal(`[{"1":"2"},{"3":"4"}]`, output)
|
|
}
|
|
|
|
func Test_decode_fixed_array(t *testing.T) {
|
|
should := require.New(t)
|
|
type FixedArray [2]float64
|
|
var fixed FixedArray
|
|
should.Nil(json.Unmarshal([]byte("[1,2,3]"), &fixed))
|
|
should.Equal(float64(1), fixed[0])
|
|
should.Equal(float64(2), fixed[1])
|
|
should.Nil(Unmarshal([]byte("[1,2,3]"), &fixed))
|
|
should.Equal(float64(1), fixed[0])
|
|
should.Equal(float64(2), fixed[1])
|
|
}
|