While XML is a first-class citizen in Scala, there’s no “default” way to parse JSON. So searching StackOverflow and Google yields all kinds of responses that seem unnecessarily complicated.
Jackson
This SO answer describes the easiest solution, which gives you a Map[String, Object]
, use jackson-module-scala.
import scala.io._ import com.fasterxml.jackson.databind.ObjectMapper import com.fasterxml.jackson.module.scala.DefaultScalaModule import com.fasterxml.jackson.module.scala.experimental.ScalaObjectMapper object Main { def main(args: Array[String]): Unit = { val filename = args.head // read println(s"Reading ${args.head} ...") val json = Source.fromFile(filename) // parse val mapper = new ObjectMapper() with ScalaObjectMapper mapper.registerModule(DefaultScalaModule) val parsedJson = mapper.readValue[Map[String, Object]](json.reader()) println(parsedJson) } }
Here’s the output from a sample JSON.
Reading example.json ... Map(glossary -> Map(title -> example glossary, GlossDiv -> ..., GlossTerm -> Standard Generalized Markup Language)))))
Liftweb JSON
The lift-json
JSON parser in Liftweb does a good job, too, but returns JObject
-like types instead of raw String
or Map[String, Object]
.
import scala.io._ import net.liftweb.json._ object Main { def main(args: Array[String]): Unit = { val filename = args.head // read println(s"Reading ${args.head} ...") val json = Source.fromFile(filename) // parse let parsedJson = net.liftweb.json.parse(json.mkString) println(parsedJson) } }
Here’s the output from a sample JSON.
JObject(List(JField(glossary, ...)))
Source
The code above is here, maybe someone can contribute an example for writing JSON?