JsonFraming

org.apache.pekko.stream.scaladsl.JsonFraming
object JsonFraming

Provides JSON framing operators that can separate valid JSON objects from incoming pekko.util.ByteString objects.

Attributes

Source
JsonFraming.scala
Graph
Supertypes
class Object
trait Matchable
class Any
Self type

Members list

Type members

Classlikes

Thrown if upstream completes with a partial object in the buffer.

Thrown if upstream completes with a partial object in the buffer.

Attributes

Source
JsonFraming.scala
Supertypes
class RuntimeException
class Exception
class Throwable
trait Serializable
class Object
trait Matchable
class Any
Show all

Value members

Concrete methods

def objectScanner(maximumObjectLength: Int): Flow[ByteString, ByteString, NotUsed]

Returns a Flow that implements a "brace counting" based framing operator for emitting valid JSON chunks. It scans the incoming data stream for valid JSON objects and returns chunks of ByteStrings containing only those valid chunks.

Returns a Flow that implements a "brace counting" based framing operator for emitting valid JSON chunks. It scans the incoming data stream for valid JSON objects and returns chunks of ByteStrings containing only those valid chunks.

Typical examples of data that one may want to frame using this operator include:

Very large arrays:

 [{"id": 1}, {"id": 2}, [...], {"id": 999}]

Multiple concatenated JSON objects (with, or without commas between them):

 {"id": 1}, {"id": 2}, [...], {"id": 999}

The framing works independently of formatting, i.e. it will still emit valid JSON elements even if two elements are separated by multiple newlines or other whitespace characters. And of course is insensitive (and does not impact the emitting frame) to the JSON object's internal formatting.

If the stream completes while mid-object, the stage will fail with a PartialObjectException.

Value parameters

maximumObjectLength

The maximum length of allowed frames while decoding. If the maximum length is exceeded this Flow will fail the stream.

Attributes

Source
JsonFraming.scala