-
Notifications
You must be signed in to change notification settings - Fork 73
/
Parser.scala
49 lines (43 loc) · 1.49 KB
/
Parser.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package jawn
package support.json4s
import scala.collection.mutable
import org.json4s.JsonAST._
object Parser extends SupportParser[JValue] {
implicit val facade: Facade[JValue] =
new Facade[JValue] {
def jnull() = JNull
def jfalse() = JBool(false)
def jtrue() = JBool(true)
def jnum(s: String) = JDouble(java.lang.Double.parseDouble(s))
def jint(s: String) = JDouble(java.lang.Double.parseDouble(s))
def jstring(s: String) = JString(s)
def singleContext() =
new FContext[JValue] {
var value: JValue = null
def add(s: String) { value = jstring(s) }
def add(v: JValue) { value = v }
def finish: JValue = value
def isObj: Boolean = false
}
def arrayContext() =
new FContext[JValue] {
val vs = mutable.ListBuffer.empty[JValue]
def add(s: String) { vs += jstring(s) }
def add(v: JValue) { vs += v }
def finish: JValue = JArray(vs.toList)
def isObj: Boolean = false
}
def objectContext() =
new FContext[JValue] {
var key: String = null
val vs = mutable.ListBuffer.empty[JField]
def add(s: String): Unit =
if (key == null) key = s
else { vs += JField(key, jstring(s)); key = null }
def add(v: JValue): Unit =
{ vs += JField(key, v); key = null }
def finish: JValue = JObject(vs.toList)
def isObj: Boolean = true
}
}
}