diff --git a/errors/gerror/gerror_error_json.go b/errors/gerror/gerror_error_json.go index 5c290d7af..ae245cdd7 100644 --- a/errors/gerror/gerror_error_json.go +++ b/errors/gerror/gerror_error_json.go @@ -6,8 +6,12 @@ package gerror +import ( + "encoding/json" +) + // MarshalJSON implements the interface MarshalJSON for json.Marshal. // Note that do not use pointer as its receiver here. func (err Error) MarshalJSON() ([]byte, error) { - return []byte(`"` + err.Error() + `"`), nil + return json.Marshal(err.Error()) } diff --git a/errors/gerror/gerror_z_unit_test.go b/errors/gerror/gerror_z_unit_test.go index 83acc1837..1e463d1ba 100644 --- a/errors/gerror/gerror_z_unit_test.go +++ b/errors/gerror/gerror_z_unit_test.go @@ -395,6 +395,19 @@ func Test_Json(t *testing.T) { t.Assert(e, nil) t.Assert(string(b), `"2: 1"`) }) + gtest.C(t, func(t *gtest.T) { + errNormal := gerror.New("test") + b, e := json.Marshal(errNormal) + t.Assert(e, nil) + t.Assert(string(b), `"test"`) + }) + gtest.C(t, func(t *gtest.T) { + // The string contains special characters. + errWithSign := gerror.New(`test ""`) + b, e := json.Marshal(errWithSign) + t.Assert(e, nil) + t.Assert(string(b), `"test \"\""`) + }) } func Test_HasStack(t *testing.T) {