Skip to content

Commit 48a1709

Browse files
committed
More efficient dropping of null and [] values during serialization with jsoniter-scala-circe
1 parent c46083f commit 48a1709

File tree

3 files changed

+5
-4
lines changed

3 files changed

+5
-4
lines changed

jsoniter-scala-benchmark/shared/src/main/scala-2/com/github/plokhotnyuk/jsoniter_scala/benchmark/TwitterAPIWriting.scala

+1-2
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,9 @@ class TwitterAPIWriting extends TwitterAPIBenchmark {
3434
def circeJsoniter(): Array[Byte] = {
3535
import com.github.plokhotnyuk.jsoniter_scala.benchmark.CirceJsoniterCodecs._
3636
import com.github.plokhotnyuk.jsoniter_scala.core._
37-
import io.circe.Util._
3837
import io.circe.syntax._
3938

40-
writeToArray(deepDropEmptyValues(obj.asJson))
39+
writeToArray(obj.asJson)(jsonCodec2)
4140
}
4241
/* FIXME: DSL-JSON serializes empty collections
4342
@Benchmark

jsoniter-scala-benchmark/shared/src/main/scala-3/com/github/plokhotnyuk/jsoniter_scala/benchmark/TwitterAPIWriting.scala

+1-2
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,9 @@ class TwitterAPIWriting extends TwitterAPIBenchmark {
2525
def circeJsoniter(): Array[Byte] = {
2626
import com.github.plokhotnyuk.jsoniter_scala.benchmark.CirceJsoniterCodecs._
2727
import com.github.plokhotnyuk.jsoniter_scala.core._
28-
import io.circe.Util._
2928
import io.circe.syntax._
3029

31-
writeToArray(deepDropEmptyValues(obj.asJson))
30+
writeToArray(obj.asJson)(jsonCodec2)
3231
}
3332

3433
@Benchmark

jsoniter-scala-benchmark/shared/src/main/scala/com/github/plokhotnyuk/jsoniter_scala/benchmark/CirceJsoniterCodecs.scala

+3
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ object CirceJsoniterCodecs {
1919
val prettyConfig: WriterConfig = WriterConfig.withIndentionStep(2).withPreferredBufSize(32768)
2020
val tooLongStringConfig: ReaderConfig = ReaderConfig.withPreferredCharBufSize(1024 * 1024)
2121
implicit val jsonCodec: JsonValueCodec[Json] = JsoniterScalaCodec.jsonCodec(maxDepth = 512, doSerialize = _ ne Json.Null)
22+
val jsonCodec2: JsonValueCodec[Json] = JsoniterScalaCodec.jsonCodec(maxDepth = 512, doSerialize = x => {
23+
(x ne Json.Null) && !(x.isArray && x.asArray.get.isEmpty)
24+
})
2225
val base64C3c: Codec[Array[Byte]] =
2326
Codec.from(Decoder.decodeString.map[Array[Byte]](Base64.getDecoder.decode),
2427
Encoder.encodeString.contramap[Array[Byte]](Base64.getEncoder.encodeToString))

0 commit comments

Comments
 (0)