grapple.json

package grapple.json

Members list

Packages

Type members

Classlikes

object Json

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"))

Attributes

Supertypes
class Object
trait Matchable
class Any
Self type
Json.type
trait JsonAdapter[T] extends JsonInput[T], JsonOutput[T]

Defines JSON input and output conversions.

Defines JSON input and output conversions.

Attributes

Supertypes
trait JsonOutput[T]
trait JsonInput[T]
class Object
trait Matchable
class Any
trait JsonArray extends JsonStructure

Represents JSON array.

Represents JSON array.

Attributes

See also
Companion
object
Supertypes
trait JsonValue
class Object
trait Matchable
class Any
Known subtypes
object JsonArray

Provides JSON array factory.

Provides JSON array factory.

Attributes

Companion
trait
Supertypes
class Object
trait Matchable
class Any
Self type
JsonArray.type

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"))
 .toJsonArray()

assert { user(0).as[Int] == 1000 }
assert { user(1).as[String] == "lupita" }
assert { user(2).as[Set[String]] == Set("lupita", "sudoer") }

Attributes

See also
Supertypes
class Object
trait Matchable
class Any
sealed trait JsonBoolean extends JsonValue

Represents JSON boolean.

Represents JSON boolean.

Attributes

Companion
object
Supertypes
trait JsonValue
class Object
trait Matchable
class Any
Known subtypes
object False.type
object True.type
object JsonBoolean

Provides JSON boolean factory.

Provides JSON boolean factory.

Attributes

Companion
trait
Supertypes
trait Sum
trait Mirror
class Object
trait Matchable
class Any
Self type
class JsonException(message: String, cause: Throwable) extends RuntimeException

Defines JSON exception.

Defines JSON exception.

Value parameters

cause

underlying cause

message

detail message

Attributes

Constructor

Constructs exception with detail message and underlying cause.

Supertypes
class RuntimeException
class Exception
class Throwable
trait Serializable
class Object
trait Matchable
class Any
Show all
Known subtypes
trait JsonGenerator extends AutoCloseable

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()

Attributes

See also
Companion
object
Supertypes
trait AutoCloseable
class Object
trait Matchable
class Any
object JsonGenerator

Provides JSON generator factory.

Provides JSON generator factory.

Attributes

Companion
trait
Supertypes
class Object
trait Matchable
class Any
Self type
case class JsonGeneratorError(message: String) extends JsonException

Defines JSON generator error.

Defines JSON generator error.

Value parameters

message

detail message

Attributes

Supertypes
trait Product
trait Equals
class RuntimeException
class Exception
class Throwable
trait Serializable
class Object
trait Matchable
class Any
Show all
@FunctionalInterface
trait JsonInput[T]

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] =
 json => User(json("id"), json("name"))

val json = Json.obj("id" -> 0, "name" -> "root")
assert { json.as[User] == User(0, "root") }

Attributes

See also
Supertypes
class Object
trait Matchable
class Any
Known subtypes
trait JsonAdapter[T]
case object JsonNull extends JsonValue

Represents JSON null.

Represents JSON null.

Attributes

Supertypes
trait Singleton
trait Product
trait Mirror
trait Serializable
trait Product
trait Equals
trait JsonValue
class Object
trait Matchable
class Any
Show all
Self type
JsonNull.type
sealed trait JsonNumber extends JsonValue

Represents JSON number.

Represents JSON number.

Attributes

Companion
object
Supertypes
trait JsonValue
class Object
trait Matchable
class Any
object JsonNumber

Provides JSON number factory.

Provides JSON number factory.

Attributes

Companion
trait
Supertypes
trait Sum
trait Mirror
class Object
trait Matchable
class Any
Self type
JsonNumber.type
trait JsonObject extends JsonStructure

Represents JSON object.

Represents JSON object.

Attributes

See also
Companion
object
Supertypes
trait JsonValue
class Object
trait Matchable
class Any
Known subtypes
object JsonObject

Provides JSON object factory.

Provides JSON object factory.

Attributes

Companion
trait
Supertypes
class Object
trait Matchable
class Any
Self type
JsonObject.type

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"))
 .toJsonObject()

assert { user("id").as[Int] == 1000 }
assert { user("name").as[String] == "lupita" }
assert { user("groups").as[Set[String]] == Set("lupita", "sudoer") }

Attributes

See also
Supertypes
class Object
trait Matchable
class Any
@FunctionalInterface
trait JsonOutput[T]

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") }

Attributes

See also
Supertypes
class Object
trait Matchable
class Any
Known subtypes
trait JsonAdapter[T]
trait JsonParser extends Iterator[Event], AutoCloseable

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 key and value
 assert { parser.next() == Event.Key("id") }
 assert { parser.next() == Event.Value(1000) }

 // Get key and value
 assert { parser.next() == Event.Key("name") }
 assert { parser.next() == Event.Value("lupita") }

 // Get key and value
 assert { parser.next() == Event.Key("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()

Attributes

See also
Companion
object
Supertypes
trait AutoCloseable
trait Iterator[Event]
trait IterableOnceOps[Event, Iterator, Iterator[Event]]
trait IterableOnce[Event]
class Object
trait Matchable
class Any
Show all
object JsonParser

Provides JSON parser factory and other utilities.

Provides JSON parser factory and other utilities.

Attributes

Companion
trait
Supertypes
class Object
trait Matchable
class Any
Self type
JsonParser.type
case class JsonParserError(message: String, offset: Long) extends JsonException

Defines JSON parser error.

Defines JSON parser error.

Value parameters

message

detail message

offset

character offset of parser error

Attributes

Supertypes
trait Product
trait Equals
class RuntimeException
class Exception
class Throwable
trait Serializable
class Object
trait Matchable
class Any
Show all
trait JsonReader extends AutoCloseable

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()

Attributes

See also
Companion
object
Supertypes
trait AutoCloseable
class Object
trait Matchable
class Any
object JsonReader

Provides JSON reader factory.

Provides JSON reader factory.

Attributes

Companion
trait
Supertypes
class Object
trait Matchable
class Any
Self type
JsonReader.type
sealed trait JsonString extends JsonValue

Represents JSON string.

Represents JSON string.

Attributes

Companion
object
Supertypes
trait JsonValue
class Object
trait Matchable
class Any
object JsonString

Provides JSON string factory.

Provides JSON string factory.

Attributes

Companion
trait
Supertypes
trait Sum
trait Mirror
class Object
trait Matchable
class Any
Self type
JsonString.type
sealed trait JsonStructure extends JsonValue

Represents JSON structure.

Represents JSON structure.

Attributes

Supertypes
trait JsonValue
class Object
trait Matchable
class Any
Known subtypes

Assumes either JSON object or JSON array.

Assumes either JSON object or JSON array.

Attributes

See also
Note

A structure facade is created by conversion only.

Supertypes
trait JsonArray
trait JsonObject
trait JsonValue
class Object
trait Matchable
class Any
Show all
sealed trait JsonValue

Represents JSON value.

Represents JSON value.

Attributes

Supertypes
class Object
trait Matchable
class Any
Known subtypes
trait JsonBoolean
object False.type
object True.type
object JsonNull.type
trait JsonNumber
trait JsonString
trait JsonArray
trait JsonObject
Show all
trait JsonWriter extends AutoCloseable

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()

Attributes

See also
Companion
object
Supertypes
trait AutoCloseable
class Object
trait Matchable
class Any
object JsonWriter

Provides JSON writer factory.

Provides JSON writer factory.

Attributes

Companion
trait
Supertypes
class Object
trait Matchable
class Any
Self type
JsonWriter.type

Givens

Givens

given arrayToJsonArray[T](using output: JsonOutput[T]): JsonOutput[Array[T]]

Converts Array to JsonArray.

Converts Array to JsonArray.

Attributes

given bigDecimalToJsonNumber: JsonOutput[BigDecimal]

Converts BigDecimal to JsonNumber.

Converts BigDecimal to JsonNumber.

Attributes

Converts BigInt to JsonNumber.

Converts BigInt to JsonNumber.

Attributes

Converts Boolean to JsonBoolean.

Converts Boolean to JsonBoolean.

Attributes

Converts Double to JsonNumber.

Converts Double to JsonNumber.

Attributes

given eitherToJsonValue[A, B, M <: (Either)](using left: JsonOutput[A])(using right: JsonOutput[B]): JsonOutput[M[A, B]]

Converts Either to JsonValue.

Converts Either to JsonValue.

Attributes

given failureToJsonNull: JsonOutput[Failure[_]]

Converts Failure to JsonNull.

Converts Failure to JsonNull.

Attributes

Converts Float to JsonNumber.

Converts Float to JsonNumber.

Attributes

Converts Int to JsonNumber.

Converts Int to JsonNumber.

Attributes

given iterableToJsonArray[T, M <: (Iterable)](using output: JsonOutput[T]): JsonOutput[M[T]]

Converts Iterable to JsonArray.

Converts Iterable to JsonArray.

Attributes

given jsonFieldConversion[T](using output: JsonOutput[T]): Conversion[(String, T), (String, JsonValue)]

Converts (String, T) to (String, JsonValue).

Converts (String, T) to (String, JsonValue).

Attributes

given jsonInputConversion[T](using input: JsonInput[T]): Conversion[JsonValue, T]

Applies conversion using JsonInput.

Applies conversion using JsonInput.

Attributes

given jsonOutputConversion[T](using output: JsonOutput[T]): Conversion[T, JsonValue]

Applies conversion using JsonOutput.

Applies conversion using JsonOutput.

Attributes

Converts JsonValue to JsonStructureFacade.

Converts JsonValue to JsonStructureFacade.

Attributes

Throws
java.lang.ClassCastException

if not JSON structure

given jsonValueToBigDecimal: JsonInput[BigDecimal]

Converts JsonValue to BigDecimal.

Converts JsonValue to BigDecimal.

Attributes

given jsonValueToBigInt: JsonInput[BigInt]

Converts JsonValue to BigInt.

Converts JsonValue to BigInt.

Attributes

given jsonValueToBoolean: JsonInput[Boolean]

Converts JsonValue to Boolean.

Converts JsonValue to Boolean.

Attributes

given jsonValueToCollection[T, M[T]](using input: JsonInput[T])(using factory: Factory[T, M[T]]): JsonInput[M[T]]

Converts JsonValue to collection.

Converts JsonValue to collection.

Attributes

given jsonValueToDouble: JsonInput[Double]

Converts JsonValue to Double.

Converts JsonValue to Double.

Attributes

given jsonValueToEither[A, B](using left: JsonInput[A])(using right: JsonInput[B]): JsonInput[Either[A, B]]

Converts JsonValue to Either.

Converts JsonValue to Either.

Attributes

given jsonValueToFloat: JsonInput[Float]

Converts JsonValue to Float.

Converts JsonValue to Float.

Attributes

Converts JsonValue to Int.

Converts JsonValue to Int.

Attributes

Casts JsonValue to JsonArray.

Casts JsonValue to JsonArray.

Attributes

Casts JsonValue to JsonBoolean.

Casts JsonValue to JsonBoolean.

Attributes

Casts JsonValue to JsonNull.

Casts JsonValue to JsonNull.

Attributes

Casts JsonValue to JsonNumber.

Casts JsonValue to JsonNumber.

Attributes

Casts JsonValue to JsonObject.

Casts JsonValue to JsonObject.

Attributes

Casts JsonValue to JsonString.

Casts JsonValue to JsonString.

Attributes

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]]

Attributes

given jsonValueToLong: JsonInput[Long]

Converts JsonValue to Long.

Converts JsonValue to Long.

Attributes

given jsonValueToMap[T, M <: ([T] =>> Map[String, T])](using input: JsonInput[T])(using factory: Factory[(String, T), M[T]]): JsonInput[M[T]]

Converts JsonValue to Map.

Converts JsonValue to Map.

Attributes

given jsonValueToOption[T](using input: JsonInput[T]): JsonInput[Option[T]]

Converts JsonValue to Option.

Converts JsonValue to Option.

Attributes

given jsonValueToString: JsonInput[String]

Converts JsonValue to String.

Converts JsonValue to String.

Attributes

given jsonValueToTry[T](using input: JsonInput[T]): JsonInput[Try[T]]

Converts JsonValue to Try.

Converts JsonValue to Try.

Attributes

given leftToJsonValue[T](using output: JsonOutput[T]): JsonOutput[Left[T, _]]

Converts Left to JsonValue.

Converts Left to JsonValue.

Attributes

Converts Long to JsonNumber.

Converts Long to JsonNumber.

Attributes

given mapToJsonObject[T, M <: ([T] =>> Map[String, T])](using output: JsonOutput[T]): JsonOutput[M[T]]

Converts Map to JsonObject.

Converts Map to JsonObject.

Attributes

given noneToJsonNull: JsonOutput[None.type]

Converts None to JsonNull.

Converts None to JsonNull.

Attributes

given optionToJsonValue[T, M <: (Option)](using output: JsonOutput[T]): JsonOutput[M[T]]

Converts Some to JsonValue or returns JsonNull if None.

Converts Some to JsonValue or returns JsonNull if None.

Attributes

given rightToJsonValue[T](using output: JsonOutput[T]): JsonOutput[Right[_, T]]

Converts Right to JsonValue.

Converts Right to JsonValue.

Attributes

Converts String to JsonString.

Converts String to JsonString.

Attributes

given tryToJsonValue[T, M <: (Try)](using output: JsonOutput[T]): JsonOutput[M[T]]

Converts Success to JsonValue or returns JsonNull if Failure.

Converts Success to JsonValue or returns JsonNull if Failure.

Attributes

Extensions

Extensions

extension (json: JsonValue)
def \(key: String): JsonValue

Gets value in JSON object.

Gets value in JSON object.

Value parameters

key

object key

Attributes

Throws
ClassCastException

if not JsonObject

def \(index: Int): JsonValue

Gets value in JSON array.

Gets value in JSON array.

Value parameters

index

array index

Attributes

Throws
ClassCastException

if not JsonArray

def \\(key: String): Seq[JsonValue]

Collects values with given object key while traversing nested objects and arrays.

Collects values with given object key 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 parameters

key

object key

Attributes