package Ġcom . be ust . kl ax on . jackson Ċ Ċ import Ġcom . be ust . kl ax on . JsonArray Ċ import Ġcom . be ust . kl ax on . JsonObject Ċ import Ġcom . be ust . kl ax on . Kl ax on Json Ċ import Ġcom . be ust . kl ax on . Parser Ċ import Ġcom . be ust . kl ax on . json Ċ import Ġcom . fasterxml . jackson . core . Json Parser Ċ import Ġcom . fasterxml . jackson . databind . Deserialization Context Ċ import Ġcom . fasterxml . jackson . databind . Json Deserializer Ċ import Ġcom . fasterxml . jackson . databind . JsonNode Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġcom . fasterxml . jackson . databind . module . Simple Module Ċ import Ġcom . fasterxml . jackson . databind . node . Json NodeType Ċ import Ġjava . io . InputStream Ċ import Ġjava . io . Reader Ċ import Ġjava . nio . charset . Charset Ċ import Ġjava . util . Base 6 4 Ċ Ċ /** Ċ Ġ* ĠAn Ġimplementation Ġof Ġthe Ġ[ Parser ] Ġthat Ġuses Ċ Ġ* Ġ[ Jack son ]( https :// github . com / F aster XML / jackson ). Ċ Ġ* Ċ Ġ* ĠOn Ġvery Ġlarge ĠJSON Ġpayload s Ġthis Ġparser Ġhas Ġbeen Ġfound Ġto Ġtake Ġ 1 / 2 Ġthe Ġtime Ġof Ġthe Ġkl ax on Ġ[ Parser ]. Ċ Ġ*/ Ċ fun ĠParser . Companion . jackson (): ĠParser Ġ= ĊĠĠĠ ĠJack son Parser . create () Ċ Ċ internal Ġclass ĠJack son Parser Ċ private Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġmapper : ĠObjectMapper Ċ ) Ġ: ĠParser Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġparse ( raw Value : ĠStringBuilder ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmapper . readValue ( raw Value . toString (), ĠAny :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġparse ( inputStream : ĠInputStream , Ġcharset : ĠCharset ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġcharset Ġis Ġignored ĊĠĠĠĠĠĠĠ Ġreturn Ġmapper . readValue ( inputStream , ĠAny :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġparse ( reader : ĠReader ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmapper . readValue ( reader , ĠAny :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġcreate (): ĠJack son Parser Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmapper Ġ= ĠObjectMapper (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregister Module ( Simple Module (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Deserializer ( Map :: class . java , ĠK l ax on JsonObject Deserializer ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Deserializer ( List :: class . java , ĠK l ax on JsonArray Deserializer ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠJack son Parser ( mapper ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġclass ĠK l ax on JsonObject Deserializer Ċ internal Ġconstructor () Ġ: ĠJson Deserializer < JsonObject >() Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġdeserialize ( p : ĠJson Parser , Ġctxt : ĠDeserial ization Context ): ĠJsonObject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnode : ĠJsonNode Ġ= Ġp . codec . read Tree ( p ) ĊĠĠĠĠĠĠĠ Ġreturn Ġparse JsonObject ( node ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġclass ĠK l ax on JsonArray Deserializer Ċ internal Ġconstructor () Ġ: ĠJson Deserializer < JsonArray <* >>() Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġdeserialize ( p : ĠJson Parser , Ġctxt : ĠDeserial ization Context ): ĠJson Array < *> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnode : ĠJsonNode Ġ= Ġp . codec . read Tree ( p ) ĊĠĠĠĠĠĠĠ Ġreturn Ġparse JsonArray ( node ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġfun Ġparse JsonObject ( node : ĠJsonNode ) Ġ= Ġjson Ġ{ ĊĠĠĠ Ġparse JsonObject ( node ) Ċ } Ċ Ċ internal Ġfun Ġparse JsonArray ( node : ĠJsonNode ) Ġ= Ġjson Ġ{ ĊĠĠĠ Ġparse JsonArray ( node ) Ċ } Ċ Ċ private Ġfun ĠK l ax on Json . parse JsonObject ( node : ĠJsonNode ): ĠJsonObject Ġ{ ĊĠĠĠ Ġval Ġpairs Ġ= ĊĠĠĠĠĠĠĠ Ġnode ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fields () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . key Ġto Ġparse Value ( it . value ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Typed Array () ĊĠĠĠ Ġreturn Ġobj (* pairs ) Ċ } Ċ Ċ private Ġfun ĠK l ax on Json . parse JsonArray ( node : ĠJsonNode ): ĠJson Array < *> Ġ{ ĊĠĠĠ Ġval Ġsequence Ġ= ĊĠĠĠĠĠĠĠ Ġnode ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. elements () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġparse Value ( it ) Ġ} ĊĠĠĠ Ġreturn Ġarray ( sequence . toList ()) Ċ } Ċ Ċ private Ġfun ĠK l ax on Json . parse Value ( node : ĠJsonNode ): ĠAny ? Ġ{ ĊĠĠĠ Ġval Ġnode Type Ġ= ĠcheckNotNull ( node . nodeType ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" JsonNode . nodeType Ġwas Ġnull ." ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġwhen Ġ( nodeType ) Ġ{ ĊĠĠĠĠĠĠĠ ĠJson NodeType . STRING Ġ-> Ġnode . as Text () ĊĠĠĠĠĠĠĠ ĠJson NodeType . OBJECT Ġ-> Ġparse JsonObject ( node ) ĊĠĠĠĠĠĠĠ ĠJson NodeType . ARRAY Ġ-> Ġparse JsonArray ( node ) ĊĠĠĠĠĠĠĠ ĠJson NodeType . BOOLEAN Ġ-> Ġnode . as Boolean () ĊĠĠĠĠĠĠĠ ĠJson NodeType . NUMBER Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . is Int Ġ-> Ġnode . as Int () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . is Long Ġ-> Ġnode . as Long () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . is Double Ġ-> Ġnode . doubleValue () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . is Float Ġ-> Ġnode . float Value () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . is BigDecimal Ġ-> Ġnode . decimal Value () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . is BigInteger Ġ-> Ġnode . big Integer Value () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠUnsupportedOperationException (" Unsupported Ġnumber Ġtype : Ġ$ node ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠJson NodeType . BINARY Ġ-> ĠBase 6 4 . get Encoder (). encode ToString ( node . binary Value ()) ĊĠĠĠĠĠĠĠ ĠJson NodeType . NULL , ĠJson NodeType . MISSING Ġ-> Ġnull ĊĠĠĠĠĠĠĠ ĠJson NodeType . PO JO Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠUnsupportedOperationException (" Unsupported Ġtype Ġ${ Json NodeType . PO JO }") ĊĠĠĠ Ġ} Ċ } Ċ