src/Pure/General/json.scala
author wenzelm
Wed, 12 Oct 2016 15:48:05 +0200
changeset 64168 e573b985390c
parent 63992 3aa9837d05c7
child 64545 25045094d7bb
permissions -rw-r--r--
added clone_repository; tuned;

/*  Title:      Pure/General/json.scala
    Author:     Makarius

Support for JSON parsing.
*/

package isabelle


object JSON
{
  /* parse */

  def parse(text: String): Any =
    scala.util.parsing.json.JSON.parseFull(text) getOrElse error("Malformed JSON")


  /* field access */

  def any(obj: Any, name: String): Option[Any] =
    obj match {
      case m: Map[String, Any] => m.get(name)
      case _ => None
    }

  def array(obj: Any, name: String): List[Any] =
    any(obj, name) match {
      case Some(a: List[Any]) => a
      case _ => Nil
    }

  def string(obj: Any, name: String): Option[String] =
    any(obj, name) match {
      case Some(x: String) => Some(x)
      case _ => None
    }

  def double(obj: Any, name: String): Option[Double] =
    any(obj, name) match {
      case Some(x: Double) => Some(x)
      case _ => None
    }

  def long(obj: Any, name: String): Option[Long] =
    double(obj, name).map(_.toLong)

  def int(obj: Any, name: String): Option[Int] =
    double(obj, name).map(_.toInt)

  def bool(obj: Any, name: String): Option[Boolean] =
    any(obj, name) match {
      case Some(x: Boolean) => Some(x)
      case _ => None
    }
}