Selaa lähdekoodia

Fix the incompatible encoding

Li Yi 7 vuotta sitten
vanhempi
commit
e4aa2ec063
2 muutettua tiedostoa jossa 37 lisäystä ja 2 poistoa
  1. 36 0
      api_tests/marshal_json_test.go
  2. 1 2
      reflect_marshaler.go

+ 36 - 0
api_tests/marshal_json_test.go

@@ -0,0 +1,36 @@
+package test
+
+import (
+	"bytes"
+	"encoding/json"
+	"github.com/json-iterator/go"
+	"testing"
+	"github.com/stretchr/testify/require"
+)
+
+
+type Foo struct {
+	Bar interface{}
+}
+
+func (f Foo) MarshalJSON() ([]byte, error) {
+	var buf bytes.Buffer
+	err := json.NewEncoder(&buf).Encode(f.Bar)
+	return buf.Bytes(), err
+}
+
+
+// Standard Encoder has trailing newline.
+func TestEncodeMarshalJSON(t *testing.T) {
+
+	foo := Foo {
+		Bar: 123,
+	}
+	should := require.New(t)
+	var buf, stdbuf bytes.Buffer
+	enc := jsoniter.ConfigCompatibleWithStandardLibrary.NewEncoder(&buf)
+	enc.Encode(foo)
+	stdenc := json.NewEncoder(&stdbuf)
+	stdenc.Encode(foo)
+	should.Equal(stdbuf.Bytes(), buf.Bytes())
+}

+ 1 - 2
reflect_marshaler.go

@@ -93,8 +93,7 @@ func (encoder *marshalerEncoder) Encode(ptr unsafe.Pointer, stream *Stream) {
 		stream.WriteNil()
 		return
 	}
-	marshaler := obj.(json.Marshaler)
-	bytes, err := marshaler.MarshalJSON()
+	bytes, err := json.Marshal(obj)
 	if err != nil {
 		stream.Error = err
 	} else {