summaryrefslogtreecommitdiff
path: root/src/main/scala/cc
diff options
context:
space:
mode:
authorMathias <mathias@spray.cc>2011-12-07 10:39:48 +0100
committerMathias <mathias@spray.cc>2011-12-07 10:39:48 +0100
commit6d12a46772034109e08492caca3da4c77627bcfe (patch)
tree4c0ff36faec921f791123f2b17c738e161519be4 /src/main/scala/cc
parent6a5ccb2e6c37f7922db34f29c1f9cfd61a2397e8 (diff)
downloadspray-json-6d12a46772034109e08492caca3da4c77627bcfe.tar.gz
spray-json-6d12a46772034109e08492caca3da4c77627bcfe.tar.bz2
spray-json-6d12a46772034109e08492caca3da4c77627bcfe.zip
Add JsValue.asJsObject methods, simplifies JsObject matching
Diffstat (limited to 'src/main/scala/cc')
-rw-r--r--src/main/scala/cc/spray/json/JsValue.scala20
1 files changed, 16 insertions, 4 deletions
diff --git a/src/main/scala/cc/spray/json/JsValue.scala b/src/main/scala/cc/spray/json/JsValue.scala
index f4dbf91..d14312b 100644
--- a/src/main/scala/cc/spray/json/JsValue.scala
+++ b/src/main/scala/cc/spray/json/JsValue.scala
@@ -18,20 +18,29 @@
package cc.spray.json
-import collection.mutable.{LinkedHashMap, ListBuffer}
import collection.immutable.ListMap
/**
* The general type of a JSON AST node.
*/
-sealed trait JsValue {
+sealed abstract class JsValue {
override def toString = compactPrint
def toString(printer: (JsValue => String)) = printer(this)
def compactPrint = CompactPrinter(this)
def prettyPrint = PrettyPrinter(this)
def convertTo[T :JsonReader]: T = jsonReader[T].read(this)
+ /**
+ * Returns `this` if this JsValue is a JsObject, otherwise throws a DeserializationException with the given error msg.
+ */
+ def asJsObject(errorMsg: String = "JSON object expected"): JsObject = deserializationError(errorMsg)
+
+ /**
+ * Returns `this` if this JsValue is a JsObject, otherwise throws a DeserializationException.
+ */
+ def asJsObject: JsObject = asJsObject()
+
@deprecated("Superceded by 'convertTo'", "1.1.0")
def fromJson[T :JsonReader]: T = convertTo
}
@@ -39,7 +48,10 @@ sealed trait JsValue {
/**
* A JSON object.
*/
-case class JsObject(fields: Map[String, JsValue]) extends JsValue
+case class JsObject(fields: Map[String, JsValue]) extends JsValue {
+ override def asJsObject(errorMsg: String) = this
+ def getFields(fieldNames: String*): Seq[JsValue] = fieldNames.flatMap(fields.get)
+}
object JsObject {
// we use a ListMap in order to preserve the field order
def apply(members: JsField*) = new JsObject(ListMap(members: _*))
@@ -82,7 +94,7 @@ object JsNumber {
/**
* JSON Booleans.
*/
-sealed trait JsBoolean extends JsValue {
+sealed abstract class JsBoolean extends JsValue {
def value: Boolean
}
object JsBoolean {