File tree 1 file changed +23
-2
lines changed
zio-json/shared/src/main/scala/zio/json
1 file changed +23
-2
lines changed Original file line number Diff line number Diff line change @@ -120,8 +120,26 @@ object JsonEncoder extends GeneratedTupleEncoders with EncoderLowPriority1 with
120
120
121
121
override def unsafeEncode (a : String , indent : Option [Int ], out : Write ): Unit = {
122
122
out.write('"' )
123
+ val len = a.length
123
124
var i = 0
125
+ while (i < len) {
126
+ val c = a.charAt(i)
127
+ i += 1
128
+ if (c == '"' || c == '\\ ' || c < ' ' ) {
129
+ writeEncoded(a, out)
130
+ return
131
+ }
132
+ }
133
+ out.write(a)
134
+ out.write('"' )
135
+ }
136
+
137
+ override final def toJsonAST (a : String ): Either [String , Json ] =
138
+ Right (Json .Str (a))
139
+
140
+ private [this ] def writeEncoded (a : String , out : Write ): Unit = {
124
141
val len = a.length
142
+ var i = 0
125
143
while (i < len) {
126
144
(a.charAt(i): @ switch) match {
127
145
case '"' => out.write(" \\\" " )
@@ -140,8 +158,6 @@ object JsonEncoder extends GeneratedTupleEncoders with EncoderLowPriority1 with
140
158
out.write('"' )
141
159
}
142
160
143
- override final def toJsonAST (a : String ): Either [String , Json ] =
144
- Right (Json .Str (a))
145
161
}
146
162
147
163
implicit val char : JsonEncoder [Char ] = new JsonEncoder [Char ] {
@@ -151,6 +167,11 @@ object JsonEncoder extends GeneratedTupleEncoders with EncoderLowPriority1 with
151
167
(a : @ switch) match {
152
168
case '"' => out.write(" \\\" " )
153
169
case '\\ ' => out.write(" \\\\ " )
170
+ case '\b ' => out.write(" \\ b" )
171
+ case '\f ' => out.write(" \\ f" )
172
+ case '\n ' => out.write(" \\ n" )
173
+ case '\r ' => out.write(" \\ r" )
174
+ case '\t ' => out.write(" \\ t" )
154
175
case c =>
155
176
if (c < ' ' ) out.write(" \\ u%04x" .format(c.toInt))
156
177
else out.write(c)
You can’t perform that action at this time.
0 commit comments