diff --git a/README.md b/README.md index 6644e4d..870bec8 100644 --- a/README.md +++ b/README.md @@ -101,6 +101,8 @@ Boolean | bool None | null Null | null Unit | null +NaN | null +Infinity | null AbstractSeq[_] | array scala.collection.mutable.AbstractSeq[_] | array Array[_] | array diff --git a/build.sbt b/build.sbt index b585d66..f4af1ea 100644 --- a/build.sbt +++ b/build.sbt @@ -1,6 +1,6 @@ name := "sjson" organization := "io.github.idata-shopee" -version := "0.1.4" +version := "0.1.5" scalaVersion := "2.12.4" useGpg := true diff --git a/src/main/scala/io/github/shopee/idata/sjson/Converter.scala b/src/main/scala/io/github/shopee/idata/sjson/Converter.scala index 9f05041..756423d 100644 --- a/src/main/scala/io/github/shopee/idata/sjson/Converter.scala +++ b/src/main/scala/io/github/shopee/idata/sjson/Converter.scala @@ -4,8 +4,8 @@ import scala.reflect._ import scala.reflect.runtime.universe._ /** - * convert a plain scala value (string, number, map, list, true, false, null) to a specific case class - */ + * convert a plain scala value (string, number, map, list, true, false, null) to a specific case class + */ object JSONConverter { def convert[T: TypeTag](plain: Any) = convertHelp(typeOf[T], plain).asInstanceOf[T] diff --git a/src/main/scala/io/github/shopee/idata/sjson/Stringify.scala b/src/main/scala/io/github/shopee/idata/sjson/Stringify.scala index 27866fd..7354870 100644 --- a/src/main/scala/io/github/shopee/idata/sjson/Stringify.scala +++ b/src/main/scala/io/github/shopee/idata/sjson/Stringify.scala @@ -30,7 +30,10 @@ object Stringify { case v: java.util.Date => JSONUtil.escapeString(v.toString()) // number + case v: Double => if (v.isNaN || v.isInfinity) "null" else v.toString() + case v: Float => if (v.isNaN || v.isInfinity) "null" else v.toString() case v: Number => v.toString() + // boolean case v: Boolean => if (v == true) "true" else "false" // null diff --git a/src/test/scala/io/github/shopee/idata/sjson/StringifyTest.scala b/src/test/scala/io/github/shopee/idata/sjson/StringifyTest.scala index 6101ec3..3ea6f2a 100644 --- a/src/test/scala/io/github/shopee/idata/sjson/StringifyTest.scala +++ b/src/test/scala/io/github/shopee/idata/sjson/StringifyTest.scala @@ -17,6 +17,9 @@ class stringifyTest extends org.scalatest.FunSuite { val d: Double = 234.134 assert(JSON.stringify(d) == "234.134") assert(JSON.stringify(123456l) == "123456") + assert(JSON.stringify(Double.NaN) == "null") + assert(JSON.stringify(Float.NaN) == "null") + assert(JSON.stringify(1.0 / 0.0) == "null") } test("stringify: boolean") { @@ -46,7 +49,11 @@ class stringifyTest extends org.scalatest.FunSuite { test("stringify: java.util.Date") { assert( - JSON.stringify(new java.util.Date(1990 - 1900, 2, 12)) == s""""${new java.util.Date(1990 - 1900, 2, 12).toString()}"""" + JSON.stringify(new java.util.Date(1990 - 1900, 2, 12)) == s""""${new java.util.Date( + 1990 - 1900, + 2, + 12 + ).toString()}"""" ) }