Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Example of automatic case class extraction from JSON using Rapture JSON 0.9.2
Welcome to Scala version 2.10.2 (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_24).
Type in expressions to have them evaluated.
Type :help for more information.
scala> import rapture.core._
import rapture.core._
scala> import rapture.json._
import rapture.json._
scala> import jsonParsers.scalaJson._ // in Rapture JSON 0.10, import jsonBackends.scalaJson._
import jsonParsers.scalaJson._
scala> import strategy.throwExceptions // not required in Rapture JSON 0.10
import strategy.throwExceptions
scala> val molecule = json"""
| {
| "name": "Sodium bicarbonate",
| "elements": [
| { "name": "Hydrogen", "count": 1, "unitMass": 1.00794 },
| { "name": "Carbon", "count": 1, "unitMass": 12.0107 },
| { "name": "Oxygen", "count": 3, "unitMass": 15.9994 },
| { "name": "Sodium", "count": 1, "unitMass": 22.989769 }
| ]
| }
| """
molecule: rapture.io.Json =
{
"name": "Sodium bicarbonate",
"elements": [
{
"name": "Hydrogen",
"count": 1.0,
"unitMass": 1.00794
},
{
"name": "Carbon",
"count": 1.0,
"unitMass": 12.0107
},
{
"name": "Oxygen",
"count": 3.0,
"unitMass": 15.9994
},
{
"name": "Sodium",
"count": 1.0,
"unitMass": 22.989769
}
]
}
scala> case class Element(name: String, count: Int, unitMass: Double)
defined class Element
scala> molecule.elements(1).as[Element]
res0: Element = Element(Carbon,1,12.0107)
scala> case class Molecule(name: String, elements: List[Element]) { def mass = elements.map(c => c.count*c.unitMass).sum }
defined class Molecule
scala> molecule.as[Molecule]
res1: Molecule = Molecule(Sodium bicarbonate,List(Element(Hydrogen,1,1.00794), Element(Carbon,1,12.0107), Element(Oxygen,3,15.9994), Element(Sodium,1,22.989769)))
scala> res1.mass
res2: Double = 84.006609
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment