summaryrefslogtreecommitdiff
path: root/src/main/scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/scala')
-rw-r--r--src/main/scala/cc/spray/json/BasicFormats.scala4
-rw-r--r--src/main/scala/cc/spray/json/JsValue.scala8
2 files changed, 9 insertions, 3 deletions
diff --git a/src/main/scala/cc/spray/json/BasicFormats.scala b/src/main/scala/cc/spray/json/BasicFormats.scala
index e16b4ca..32ae91e 100644
--- a/src/main/scala/cc/spray/json/BasicFormats.scala
+++ b/src/main/scala/cc/spray/json/BasicFormats.scala
@@ -42,6 +42,7 @@ trait BasicFormats {
def write(x: Float) = JsNumber(x)
def read(value: JsValue) = value match {
case JsNumber(x) => x.floatValue
+ case JsNull => Float.NaN
case _ => throw new DeserializationException("Float expected")
}
}
@@ -50,6 +51,7 @@ trait BasicFormats {
def write(x: Double) = JsNumber(x)
def read(value: JsValue) = value match {
case JsNumber(x) => x.doubleValue
+ case JsNull => Double.NaN
case _ => throw new DeserializationException("Double expected")
}
}
@@ -124,4 +126,4 @@ trait BasicFormats {
}
}
-} \ No newline at end of file
+}
diff --git a/src/main/scala/cc/spray/json/JsValue.scala b/src/main/scala/cc/spray/json/JsValue.scala
index 86dbb06..e4ab734 100644
--- a/src/main/scala/cc/spray/json/JsValue.scala
+++ b/src/main/scala/cc/spray/json/JsValue.scala
@@ -110,7 +110,11 @@ case class JsNumber(value: BigDecimal) extends JsValue
object JsNumber {
def apply(n: Int) = new JsNumber(BigDecimal(n))
def apply(n: Long) = new JsNumber(BigDecimal(n))
- def apply(n: Double) = new JsNumber(BigDecimal(n))
+ def apply(n: Double) = n match {
+ case n if n.isNaN => JsNull
+ case n if n.isInfinity => JsNull
+ case _ => new JsNumber(BigDecimal(n))
+ }
def apply(n: BigInt) = new JsNumber(BigDecimal(n))
def apply(n: String) = new JsNumber(BigDecimal(n))
}
@@ -135,4 +139,4 @@ case object JsFalse extends JsBoolean {
/**
* The representation for JSON null.
*/
-case object JsNull extends JsValue \ No newline at end of file
+case object JsNull extends JsValue