grapple.json
Type members
Classlikes
Provides JSON utilities.
Provides JSON utilities.
import scala.language.implicitConversions
import grapple.json.{ *, given }
// Create JSON object
val user = Json.obj("id" -> 1000, "name" -> "lupita")
// Create JSON array
val info = Json.arr(user, "/home/lupita", 8L * 1024 * 1024 * 1024)
// Parse JSON text
val root = Json.parse("""{ "id": 0, "name": "root" }""")
case class User(id: Int, name: String)
given userOutput: JsonOutput[User] with
def write(u: User) = Json.obj("id" -> u.id, "name" -> u.name)
// Convert value to JSON object
val nobody = Json.toJson(User(65534, "nobody"))
Defines JSON array builder.
Defines JSON array builder.
import scala.language.implicitConversions
import grapple.json.{ *, given }
val user = JsonArrayBuilder()
.add(1000)
.add("lupita")
.add(Set("lupita", "sudoer"))
.build()
assert { user(0).as[Int] == 1000 }
assert { user(1).as[String] == "lupita" }
assert { user(2).as[Set[String]] == Set("lupita", "sudoer") }
- See also
Defines JSON exception.
Defines JSON exception.
- Value Params
- cause
underlying cause
- message
detail message
- Constructor
Constructs exception with detail message and underlying cause.
Defines JSON generator.
Defines JSON generator.
import java.io.StringWriter
import scala.language.implicitConversions
import grapple.json.{ *, given }
val buf = StringWriter()
val out = JsonGenerator(buf)
try
out.writeStartObject() // start root object
out.write("id", 1000)
out.write("name", "lupita")
out.writeStartArray("groups") // start nested array
out.write("lupita")
out.write("admin")
out.write("sudoer")
out.writeEnd() // end nested array
out.writeStartObject("info") // start nested object
out.write("home", "/home/lupita")
out.write("storage", "8 GiB")
out.writeEnd() // end nested object
out.writeEnd() // end root object
out.flush()
val json = Json.parse(buf.toString)
assert { json("id") == JsonNumber(1000) }
assert { json("name") == JsonString("lupita") }
assert { json("groups") == Json.arr("lupita", "admin", "sudoer") }
assert { json("info") == Json.obj("home" -> "/home/lupita", "storage" -> "8 GiB") }
finally
out.close()
- See also
- Companion
- object
Provides JSON generator factory.
Provides JSON generator factory.
- Companion
- class
Defines JSON input conversion.
Defines JSON input conversion.
import scala.language.implicitConversions
import grapple.json.{ *, given }
case class User(id: Int, name: String)
// Define how to convert JsonValue to User
given userInput: JsonInput[User] =
case json: JsonObject => User(json("id"), json("name"))
case _ => throw IllegalArgumentException("Expected JSON object")
val json = Json.obj("id" -> 0, "name" -> "root")
assert { json.as[User] == User(0, "root") }
- See also
Defines JSON object builder.
Defines JSON object builder.
import scala.language.implicitConversions
import grapple.json.{ *, given }
val user = JsonObjectBuilder()
.add("id", 1000)
.add("name", "lupita")
.add("groups", Set("lupita", "sudoer"))
.build()
assert { user("id").as[Int] == 1000 }
assert { user("name").as[String] == "lupita" }
assert { user("groups").as[Set[String]] == Set("lupita", "sudoer") }
- See also
Defines JSON output conversion.
Defines JSON output conversion.
import scala.language.implicitConversions
import grapple.json.{ *, given }
case class User(id: Int, name: String)
// Define how to convert User to JsonValue
given userOutput: JsonOutput[User] =
user => Json.obj("id" -> user.id, "name" -> user.name)
val users = Json.arr(User(0, "root"), User(1000, "lupita"))
assert { users(0) == Json.obj("id" -> 0, "name" -> "root") }
assert { users(1) == Json.obj("id" -> 1000, "name" -> "lupita") }
- See also
Defines JSON parser.
Defines JSON parser.
import scala.language.implicitConversions
import grapple.json.{ *, given }
import grapple.json.JsonParser.Event
val parser = JsonParser("""{ "id": 1000, "name": "lupita", "groups": ["lupita", "admin"] }""")
try
// Get first event (start root object)
assert { parser.next() == Event.StartObject }
// Get field name and value
assert { parser.next() == Event.FieldName("id") }
assert { parser.next() == Event.Value(1000) }
// Get field name and value
assert { parser.next() == Event.FieldName("name") }
assert { parser.next() == Event.Value("lupita") }
// Get field name and value
assert { parser.next() == Event.FieldName("groups") }
assert { parser.next() == Event.StartArray } // start nested array
assert { parser.next() == Event.Value("lupita") }
assert { parser.next() == Event.Value("admin") }
assert { parser.next() == Event.EndArray } // end nested array
// Get final event (end root object)
assert { parser.next() == Event.EndObject }
// No more events
assert { !parser.hasNext }
finally
parser.close()
- See also
- Companion
- object
Provides JSON parser factory and other utilities.
Provides JSON parser factory and other utilities.
- Companion
- class
Defines JSON parser error.
Defines JSON parser error.
- Value Params
- message
detail message
- offset
character offset of parser error
Defines JSON reader.
Defines JSON reader.
import scala.language.implicitConversions
import grapple.json.{ *, given }
val in = JsonReader("""{ "id": 1000, "name": "lupita" }""")
try
val user = in.read()
assert { user("id").as[Int] == 1000 }
assert { user("name").as[String] == "lupita" }
finally
in.close()
- See also
- Companion
- object
Defines JSON writer.
Defines JSON writer.
import java.io.StringWriter
import scala.language.implicitConversions
import grapple.json.{ *, given }
val buf = StringWriter()
val out = JsonWriter(buf)
try
val user = Json.obj("id" -> 1000, "name" -> "lupita")
out.write(user)
val json = Json.parse(buf.toString)
assert { json == user }
finally
out.close()
- See also
- Companion
- object
Givens
Givens
Converts Right
to JsonValue
using right converter or converts Left
using left.
Converts Right
to JsonValue
using right converter or converts Left
using left.
Converts JsonValue
to collection of converted values.
Converts JsonValue
to collection of converted values.
Converts JsonValue
to Right
using right converter or to Left
using
left if right is unsuccessful.
Converts JsonValue
to Right
using right converter or to Left
using
left if right is unsuccessful.
Returns JsonValue
as is.
Returns JsonValue
as is.
This instance is required to perform actions such as the following:
import scala.language.implicitConversions
import grapple.json.{ Json, JsonValue, given }
val json = Json.obj("values" -> Json.arr("abc", 123, true))
// Requires jsonValueToJsonValue
val list = json("values").as[List[JsonValue]]
Converts JsonValue
to Some
or returns None
if value is JsonNull
.
Converts JsonValue
to Some
or returns None
if value is JsonNull
.
Converts JsonValue
to Success
or returns Failure
if unsuccessful.
Converts JsonValue
to Success
or returns Failure
if unsuccessful.
Converts Map
to JsonObject
.
Converts Map
to JsonObject
.
Converts Some
to JsonValue
or returns JsonNull
if None
.
Converts Some
to JsonValue
or returns JsonNull
if None
.
Applies conversion using JsonInput[JsonArray]
.
Applies conversion using JsonInput[JsonArray]
.
Applies conversion using JsonInput[JsonObject]
.
Applies conversion using JsonInput[JsonObject]
.
Converts Success
to JsonValue
or returns JsonNull
if Failure
.
Converts Success
to JsonValue
or returns JsonNull
if Failure
.
Converts (String, T)
to (String, JsonValue)
.
Converts (String, T)
to (String, JsonValue)
.
Extensions
Extensions
Gets value in JSON object.
Gets value in JSON object.
- Value Params
- name
field name
- Throws
- ClassCastException
if not JsonObject
Gets value in JSON array.
Gets value in JSON array.
- Value Params
- index
array index
- Throws
- ClassCastException
if not JsonArray
Collects values with given field name while traversing nested objects and arrays.
Collects values with given field name while traversing nested objects and arrays.
import grapple.json.{ Json, \\, given }
val json = Json.parse("""{
"node": {
"name": "localhost",
"users": [
{ "id": 0, "name": "root" },
{ "id": 1000, "name": "lupita" }
]
}
}""")
val names = (json \\ "name").map(_.as[String])
assert { names == Seq("localhost", "root", "lupita") }
- Value Params
- name
field name