Browse Source

fix #291 omit empty was not handled properly for json raw message

Tao Wen 7 years ago
parent
commit
5d789e5e02
2 changed files with 10 additions and 2 deletions
  1. 1 1
      config.go
  2. 9 1
      value_tests/raw_message_test.go

+ 1 - 1
config.go

@@ -191,7 +191,7 @@ func (cfg *frozenConfig) validateJsonRawMessage(extension EncoderExtension) {
 			stream.WriteRaw(string(rawMessage))
 			stream.WriteRaw(string(rawMessage))
 		}
 		}
 	}, func(ptr unsafe.Pointer) bool {
 	}, func(ptr unsafe.Pointer) bool {
-		return false
+		return len(*((*json.RawMessage)(ptr))) == 0
 	}}
 	}}
 	extension[reflect2.TypeOfPtr((*json.RawMessage)(nil)).Elem()] = encoder
 	extension[reflect2.TypeOfPtr((*json.RawMessage)(nil)).Elem()] = encoder
 	extension[reflect2.TypeOfPtr((*RawMessage)(nil)).Elem()] = encoder
 	extension[reflect2.TypeOfPtr((*RawMessage)(nil)).Elem()] = encoder

+ 9 - 1
value_tests/raw_message_test.go

@@ -1,10 +1,18 @@
 package test
 package test
 
 
-import "encoding/json"
+import (
+	"encoding/json"
+)
 
 
 func init() {
 func init() {
 	marshalCases = append(marshalCases,
 	marshalCases = append(marshalCases,
 		json.RawMessage("{}"),
 		json.RawMessage("{}"),
+		selectedMarshalCase{struct {
+			Env   string          `json:"env"`
+			Extra json.RawMessage `json:"extra,omitempty"`
+		}{
+			Env: "jfdk",
+		}},
 	)
 	)
 	unmarshalCases = append(unmarshalCases, unmarshalCase{
 	unmarshalCases = append(unmarshalCases, unmarshalCase{
 		ptr:   (*json.RawMessage)(nil),
 		ptr:   (*json.RawMessage)(nil),