little.json

package little.json

Type members

Classlikes

object Implicits

Provides extension methods and implicit conversions.

Provides extension methods and implicit conversions.

object Json

Provides JSON utilities.

Provides JSON utilities.

import little.json.*
import little.json.Implicits.given
import scala.language.implicitConversions

// Create JSON object
val user = Json.obj("id" -> 1000, "name" -> "jza")

// Create JSON array
val info = Json.arr(user, "/home/jza", 8L * 1024 * 1024 * 1024)

// Parse JSON text
val root = Json.parse("""{ "id": 0, "name": "root" }""")

case class User(id: Int, name: String)

given userToJson: JsonOutput[User] with
 def apply(u: User) = Json.obj("id" -> u.id, "name" -> u.name)

// Convert value to JSON object
val nobody = Json.toJson(User(65534, "nobody"))
trait JsonArray extends JsonStructure

Defines JSON array.

Defines JSON array.

See also
Companion
object
object JsonArray

Provides JSON array factory.

Provides JSON array factory.

Companion
class

Defines JSON array builder.

Defines JSON array builder.

import little.json.*
import little.json.Implicits.given
import scala.language.implicitConversions

val user = JsonArrayBuilder()
 .add(1000)
 .add("jza")
 .add(Set("jza", "sudo"))
 .build()

assert { user(0).as[Int] == 1000 }
assert { user(1).as[String] == "jza" }
assert { user(2).as[Set[String]] == Set("jza", "sudo") }
See also
sealed trait JsonBoolean extends JsonValue

Defines JSON boolean.

Defines JSON boolean.

Companion
object
object JsonBoolean

Provides JSON boolean factory.

Provides JSON boolean factory.

Companion
class
class JsonException(message: String, cause: Throwable) extends RuntimeException

Defines JSON exception.

Defines JSON exception.

Value Params
cause

underlying cause

message

detail message

Constructor

Constructs exception with detail message and underlying cause.

case object JsonFalse extends JsonBoolean

Represents JSON false.

Represents JSON false.

trait JsonGenerator extends AutoCloseable

Defines JSON generator.

Defines JSON generator.

import java.io.StringWriter
import little.json.*
import little.json.Implicits.given
import scala.language.implicitConversions

val buf = StringWriter()
val out = JsonGenerator(buf)

try
 out.writeStartObject()          // start root object
 out.write("id", 1000)
 out.write("name", "jza")
 out.writeStartArray("groups")   // start nested array
 out.write("jza")
 out.write("adm")
 out.write("sudo")
 out.writeEnd()                  // end nested array
 out.writeStartObject("info")    // start nested object
 out.write("home", "/home/jza")
 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("jza") }
 assert { json("groups") == Json.arr("jza", "adm", "sudo") }
 assert { json("info") == Json.obj("home" -> "/home/jza", "storage" -> "8 GiB") }
finally
 out.close()
See also
Companion
object

Provides JSON generator factory.

Provides JSON generator factory.

Companion
class
case class JsonGeneratorError(message: String) extends JsonException

Defines JSON generator error.

Defines JSON generator error.

Value Params
message

detail message

trait JsonInput[T] extends Conversion[JsonValue, T]

Defines JSON input conversion.

Defines JSON input conversion.

import little.json.*
import little.json.Implicits.given
import scala.language.implicitConversions

case class User(id: Int, name: String)

// Define how to convert JsonValue to User
given jsonToUser: JsonInput[User] with
 def apply(json: JsonValue) = User(json("id"), json("name"))

val json = Json.obj("id" -> 0, "name" -> "root")
assert { json.as[User] == User(0, "root") }
See also
sealed trait JsonNull extends JsonValue

Defines JSON null.

Defines JSON null.

Companion
object
case object JsonNull extends JsonNull

Represents JSON null.

Represents JSON null.

Companion
class
trait JsonNumber extends JsonValue

Defines JSON number.

Defines JSON number.

Companion
object
object JsonNumber

Provides JSON number factory.

Provides JSON number factory.

Companion
class
trait JsonObject extends JsonStructure

Defines JSON object.

Defines JSON object.

See also
Companion
object
object JsonObject

Provides JSON object factory.

Provides JSON object factory.

Companion
class

Defines JSON object builder.

Defines JSON object builder.

import little.json.*
import little.json.Implicits.given
import scala.language.implicitConversions

val user = JsonObjectBuilder()
 .add("id", 1000)
 .add("name", "jza")
 .add("groups", Set("jza", "sudo"))
 .build()

assert { user("id").as[Int] == 1000 }
assert { user("name").as[String] == "jza" }
assert { user("groups").as[Set[String]] == Set("jza", "sudo") }
See also
trait JsonOutput[T] extends Conversion[T, JsonValue]

Defines JSON output conversion.

Defines JSON output conversion.

import little.json.*
import little.json.Implicits.given
import scala.language.implicitConversions

case class User(id: Int, name: String)

// Define how to convert User to JsonValue
given userToJson: JsonOutput[User] with
 def apply(u: User) = Json.obj("id" -> u.id, "name" -> u.name)

val users = Json.arr(User(0, "root"), User(1000, "jza"))
assert { users(0) == Json.obj("id" -> 0, "name" -> "root") }
assert { users(1) == Json.obj("id" -> 1000, "name" -> "jza") }
See also
trait JsonParser extends Iterator[Event] with AutoCloseable

Defines JSON parser.

Defines JSON parser.

import little.json.*
import little.json.Implicits.given
import scala.language.implicitConversions

import JsonParser.Event

val parser = JsonParser("""{ "id": 1000, "name": "jza", "groups": ["jza", "adm"] }""")

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

 // Get field name and value
 assert { parser.next() == Event.FieldName("groups") }
 assert { parser.next() == Event.StartArray } // start nested array
 assert { parser.next() == Event.Value("jza") }
 assert { parser.next() == Event.Value("adm") }
 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
object JsonParser

Provides JSON parser factory and other utilities.

Provides JSON parser factory and other utilities.

Companion
class
case class JsonParserError(message: String, offset: Long) extends JsonException

Defines JSON parser error.

Defines JSON parser error.

Value Params
message

detail message

offset

character offset of parser error

trait JsonReader extends AutoCloseable

Defines JSON reader.

Defines JSON reader.

import little.json.*
import little.json.Implicits.given
import scala.language.implicitConversions

val in = JsonReader("""{ "id": 1000, "name": "jza" }""")

try
 val user = in.read()
 assert { user("id").as[Int] == 1000 }
 assert { user("name").as[String] == "jza" }
finally
 in.close()
See also
Companion
object
object JsonReader

Provides JSON reader factory.

Provides JSON reader factory.

Companion
class
trait JsonString extends JsonValue

Defines JSON string.

Defines JSON string.

Companion
object
object JsonString

Provides JSON string factory.

Provides JSON string factory.

Companion
class
sealed trait JsonStructure extends JsonValue

Defines JSON structure.

Defines JSON structure.

case object JsonTrue extends JsonBoolean

Represents JSON true.

Represents JSON true.

sealed trait JsonValue

Defines JSON value.

Defines JSON value.

trait JsonWriter extends AutoCloseable

Defines JSON writer.

Defines JSON writer.

import java.io.StringWriter
import little.json.*
import little.json.Implicits.given
import scala.language.implicitConversions

val buf = StringWriter()
val out = JsonWriter(buf)

try
 val user = Json.obj("id" -> 1000, "name" -> "jza")
 out.write(user)

 val json = Json.parse(buf.toString)
 assert { json == user }
finally
 out.close()
See also
Companion
object
object JsonWriter

Provides JSON writer factory.

Provides JSON writer factory.

Companion
class