diff --git a/json.go b/json.go
index 5a7f14dccf396a503ca6d361f82d173d2617372e..a894887a618025488585ea1dd89e923cfdc217eb 100644
--- a/json.go
+++ b/json.go
@@ -28,22 +28,10 @@ import (
 	"sync"
 	"time"
 
-	jsoniter "github.com/json-iterator/go"
+	"gfx.cafe/open/jrpc/wsjson"
 )
 
-var jzon = jsoniter.Config{
-	IndentionStep:                 0,
-	MarshalFloatWith6Digits:       false,
-	EscapeHTML:                    true,
-	SortMapKeys:                   false,
-	UseNumber:                     false,
-	DisallowUnknownFields:         false,
-	TagKey:                        "",
-	OnlyTaggedField:               false,
-	ValidateJsonRawMessage:        false,
-	ObjectFieldMustBeSimpleString: false,
-	CaseSensitive:                 false,
-}.Froze()
+var jzon = wsjson.JZON
 
 const (
 	vsn                      = "2.0"
diff --git a/wsjson/wsjson.go b/wsjson/wsjson.go
index d9fb64926c931c0ddbeceb7fd6d2c8c376d7a443..07c72fdf087d4db7d4b71f93b46fd7b18dbb8f6e 100644
--- a/wsjson/wsjson.go
+++ b/wsjson/wsjson.go
@@ -18,11 +18,13 @@ var jzon = jsoniter.Config{
 	DisallowUnknownFields:         false,
 	TagKey:                        "",
 	OnlyTaggedField:               false,
-	ValidateJsonRawMessage:        true,
+	ValidateJsonRawMessage:        false,
 	ObjectFieldMustBeSimpleString: false,
 	CaseSensitive:                 false,
 }.Froze()
 
+var JZON = jzon
+
 // Read reads a JSON message from c into v.
 // It will reuse buffers in between calls to avoid allocations.
 func Read(ctx context.Context, c *websocket.Conn, v interface{}) error {