15.2. Creating a JSON String from Classes That Have Collections
Problem
You want to generate a JSON representation of a Scala object that
contains one or more collections, such as a Person
class that has a list of friends or
addresses.
Solution
Once classes start containing collections, converting them to JSON becomes more difficult. In this situation, I prefer to use the Lift-JSON domain-specific library (DSL) to generate the JSON.
Lift-JSON version 1
The Lift-JSON library uses its own DSL for generating JSON output from Scala objects. As shown in the previous recipe, this isn’t necessary for simple objects, but it is necessary once objects become more complex, specifically once they contain collections. The benefit of this approach is that you have complete control over the JSON that is generated.
The following example shows how to generate a JSON string for a
Person
class that has a friends
field defined as List[Person]
:
import
net.liftweb.json._
import
net.liftweb.json.JsonDSL._
case
class
Person
(
name
:
String
,
address
:
Address
)
{
var
friends
=
List
[
Person
]()
}
case
class
Address
(
city
:
String
,
state
:
String
)
object
LiftJsonListsVersion1
extends
App
{
//import net.liftweb.json.JsonParser._
implicit
val
formats
=
DefaultFormats
val
merc
=
Person
(
"Mercedes"
,
Address
(
"Somewhere"
,
"KY"
))
val
mel
=
Person
(
"Mel"
,
Address
(
"Lake Zurich"
,
"IL"
))
val
friends
=
List
(
merc
,
mel
)
val
p
=
Person
(
"Alvin Alexander"
,
Address
(
"Talkeetna"
,
"AK"
))
p
.
friends
=
friends
// define the json output
val
json
Get Scala Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.