This is an excerpt from the Scala Cookbook (partially modified for the internet). This is a short recipe, Recipe 15.3, “How to create a simple Scala object from a JSON String.”
Problem
You need to convert a JSON string into a simple Scala object, such as a Scala case
class that has no collections.
Solution
Use the Lift-JSON library to convert a JSON string to an instance of a case
class. This is referred to as deserializing the string into an object.
The following code shows a complete example of how to use Lift-JSON to convert a JSON string into a case
class named MailServer
. As its name implies, MailServer
represents the information an email client needs to connect to a server:
import net.liftweb.json._ // a case class to represent a mail server case class MailServer(url: String, username: String, password: String) object JsonParsingExample extends App { implicit val formats = DefaultFormats // simulate a json string val jsonString = """ { "url": "imap.yahoo.com", "username": "myusername", "password": "mypassword" } """ // convert a String to a JValue object val jValue = parse(jsonString) // create a MailServer object from the string val mailServer = jValue.extract[MailServer] println(mailServer.url) println(mailServer.username) println(mailServer.password) }
In this example, the jsonString
contains the text you’d expect to receive if you called a web service asking for a MailServer
instance. That string is converted into a Lift-JSON JValue object with the parse
function:
val jValue = parse(jsonString)
Once you have a JValue
object, use its extract
method to create a MailServer
object:
val mailServer = jValue.extract[MailServer]
The JValue
class is the root class in the Lift-JSON abstract syntax tree (AST), and its extract method builds a case
class instance from a JSON string.
Working with objects that have collections is a little more difficult, and that process is covered in the next recipe.
See Also
this post is sponsored by my books: | |||
#1 New Release |
FP Best Seller |
Learn Scala 3 |
Learn FP Fast |