@ file : Suppress (" unused ", Ġ" Member Visibility Can Be Private ") Ċ Ċ package Ġdev . ent ao . kan . json Ċ Ċ private Ġconst Ġval ĠCR : ĠChar Ġ= Ġ'\ r ' Ċ private Ġconst Ġval ĠL F : ĠChar Ġ= Ġ'\ n ' Ċ private Ġconst Ġval ĠSP : ĠChar Ġ= Ġ' Ġ' Ċ private Ġconst Ġval ĠTAB : ĠChar Ġ= Ġ'\ t ' Ċ private Ġconst Ġval ĠDOT : ĠChar Ġ= Ġ'.' Ċ private Ġconst Ġval ĠQT : ĠChar Ġ= Ġ'\" ' Ċ private Ġconst Ġval ĠS QT : ĠChar Ġ= Ġ'\'' Ċ private Ġval ĠWH ITE : ĠSet < Char > Ġ= Ġhash Set Of ( CR , ĠL F , ĠSP , ĠTAB ) Ċ private Ġval ĠNUM _ START : ĠSet < Char > Ġ= Ġhash Set Of (' 0 ', Ġ' 1 ', Ġ' 2 ', Ġ' 3 ', Ġ' 4 ', Ġ' 5 ', Ġ' 6 ', Ġ' 7 ', Ġ' 8 ', Ġ' 9 ', Ġ'-') Ċ private Ġval ĠNUM S : ĠSet < Char > Ġ= Ġhash Set Of (' 0 ', Ġ' 1 ', Ġ' 2 ', Ġ' 3 ', Ġ' 4 ', Ġ' 5 ', Ġ' 6 ', Ġ' 7 ', Ġ' 8 ', Ġ' 9 ', ĠDOT , Ġ' e ', Ġ' E ', Ġ'+', Ġ'-') Ċ private Ġval ĠESC AP : ĠSet < Char > Ġ= Ġhash Set Of ( SQ T , Ġ'\\ ', Ġ'/', Ġ' b ', Ġ' f ', Ġ' n ', Ġ' r ', Ġ' t ', Ġ' u ') Ċ Ċ private Ġval ĠChar . is White : ĠBoolean Ġget () Ġ= Ġthis Ġin ĠWH ITE Ċ Ċ class ĠY son Parser ( val Ġtext : ĠString ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġdata : ĠChar Array Ġ= Ġtext . toCharArray () ĊĠĠĠ Ġprivate Ġvar Ġcurrent : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġval Ġend : ĠBoolean Ġget () Ġ= Ġcurrent Ġ>= Ġdata . size ĊĠĠĠ Ġprivate Ġval Ġcurrent Char : ĠChar Ġget () Ġ= Ġdata [ current ] ĊĊĠĠĠ Ġval Ġleft String : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Ġ>= Ġdata . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsb Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġn Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( n Ġ< Ġ 2 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Ġ+ Ġn Ġ>= Ġdata . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( data [ current Ġ+ Ġn ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ++ n ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsb . toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġparse ( end Parse : ĠBoolean ): ĠY son Value Ġ{ ĊĠĠĠĠĠĠĠ Ġskip White () ĊĠĠĠĠĠĠĠ Ġif Ġ( end ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠY son Error (" ç©º çļĦ åŃĹç¬¦ä¸² ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġch Ġ= Ġcurrent Char ĊĠĠĠĠĠĠĠ Ġval Ġv Ġ= Ġwhen Ġ( ch ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ'{ ' Ġ-> Ġparse Object () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ'[' Ġ-> Ġparse Array () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠQT Ġ-> Ġparse String () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' t ' Ġ-> Ġparse True () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' f ' Ġ-> Ġparse False () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ' n ' Ġ-> Ġparse Null () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġin ĠNUM _ START Ġ-> Ġparse Number () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠY son Error ("") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġskip White () ĊĠĠĠĠĠĠĠ Ġif Ġ( end Parse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! this . end ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" åºĶè¯¥ ç»ĵæĿŁ è§£æŀĲ :$ left String ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġv ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġparse Array (): ĠY son Array Ġ{ ĊĠĠĠĠĠĠĠ Ġskip White () ĊĠĠĠĠĠĠĠ Ġtoken c ('[ ') ĊĠĠĠĠĠĠĠ Ġval Ġya Ġ= ĠY son Array () ĊĠĠĠĠĠĠĠ Ġwhile Ġ(! end ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġskip White () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Char Ġ== Ġ' ]') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Char Ġ== Ġ', ') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy v Ġ= Ġparse ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġya . data . add ( yv ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtoken c (' ]') ĊĠĠĠĠĠĠĠ Ġreturn Ġya ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġparse Object (): ĠY son Object Ġ{ ĊĠĠĠĠĠĠĠ Ġskip White () ĊĠĠĠĠĠĠĠ Ġtoken c ('{ ') ĊĠĠĠĠĠĠĠ Ġval Ġyo Ġ= ĠY son Object () ĊĠĠĠĠĠĠĠ Ġwhile Ġ(! end ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġskip White () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Char Ġ== Ġ' }') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Char Ġ== Ġ', ') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġparse String () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoken c (': ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy v Ġ= Ġparse ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġyo . data [ key . data ] Ġ= Ġy v ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtoken c (' }') ĊĠĠĠĠĠĠĠ Ġreturn Ġyo ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġparse String (): ĠY son String Ġ{ ĊĠĠĠĠĠĠĠ Ġskip White () ĊĠĠĠĠĠĠĠ Ġtoken c ( QT )// åŃĹç¬¦ä¸² ä»¥ åıĮ å¼ķ åı· å¼Ģå§ĭ ĊĠĠĠĠĠĠĠ Ġval Ġbuf Ġ= ĠStringBuilder ( 6 4 ) ĊĠĠĠĠĠĠĠ Ġvar Ġes cing Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġwhile Ġ(! end ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġch Ġ= Ġcurrent Char ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! es cing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ch Ġ== ĠQT ) Ġ{// åŃĹç¬¦ä¸² ç»ĵæĿŁ , åıĮ å¼ķ åı· ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ch Ġ== Ġ'\\ ') Ġ{// å¼Ģå§ĭ è½¬ ä¹ī ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġes cing Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuf . append ( ch )// æŃ£å¸¸ åŃĹç¬¦ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġes cing Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( ch ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠQT , ĠS QT , Ġ'\\ ', Ġ'/' Ġ-> Ġbuf . append ( ch ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' n ' Ġ-> Ġbuf . append ( LF ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' r ' Ġ-> Ġbuf . append ( CR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' t ' Ġ-> Ġbuf . append ( TAB ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' u ' Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Ġ+ Ġ 4 Ġ< Ġtext . length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsb Ġ= ĠStringBuilder ( 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( text [ current Ġ+ Ġ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( text [ current Ġ+ Ġ 1 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( text [ current Ġ+ Ġ 2 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( text [ current Ġ+ Ġ 3 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Ġ+= Ġ 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġn Ġ= Ġsb . toString (). toInt ( 1 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuf . append ( n . to Char ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠY son Error (" æľŁ æľĽ æĺ¯ unicode åŃĹç¬¦ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuf . append ( ch ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( es cing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġ ĠY son Error (" è§£æŀĲ éĶĻè¯¯ , è½¬ ä¹ī , ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtoken c ( QT ) ĊĠĠĠĠĠĠĠ Ġreturn ĠY son String ( buf . toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġparse Number (): ĠY son Value Ġ{ ĊĠĠĠĠĠĠĠ Ġskip White () ĊĠĠĠĠĠĠĠ Ġval Ġbuf Ġ= ĠStringBuilder ( 3 2 ) ĊĠĠĠĠĠĠĠ Ġwhile Ġ(! end ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġcurrent Char ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( c Ġ! in ĠNUM S ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuf . append ( c ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġbuf . toString () ĊĠĠĠĠĠĠĠ Ġif Ġ( s . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠY son Error (" éĿŀ æķ°åŃĹ ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( '. ' Ġin Ġs ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd Ġ= Ġs . toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠY son Num ( d ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġn Ġ= Ġs . to Long () ĊĠĠĠĠĠĠĠ Ġreturn ĠY son Num ( n ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġparse True (): ĠY son Bool Ġ{ ĊĠĠĠĠĠĠĠ Ġskip White () ĊĠĠĠĠĠĠĠ Ġtokens (" true ") ĊĠĠĠĠĠĠĠ Ġreturn ĠY son Bool . True ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġparse False (): ĠY son Bool Ġ{ ĊĠĠĠĠĠĠĠ Ġskip White () ĊĠĠĠĠĠĠĠ Ġtokens (" false ") ĊĠĠĠĠĠĠĠ Ġreturn ĠY son Bool . False ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġparse Null (): ĠY son Null Ġ{ ĊĠĠĠĠĠĠĠ Ġskip White () ĊĠĠĠĠĠĠĠ Ġtokens (" null ") ĊĠĠĠĠĠĠĠ Ġreturn ĠY son Null . inst ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnext () Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent Ġ+= Ġ 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġskip White () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhile Ġ(! end ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Char . is White ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Char ( c : ĠChar ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcurrent Char Ġ== Ġc ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtoken c ( c : ĠChar ) Ġ{ ĊĠĠĠĠĠĠĠ Ġskip White () ĊĠĠĠĠĠĠĠ Ġif Ġ( current Char Ġ!= Ġc ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠY son Error (" æľŁ æľĽ æĺ¯ åŃĹç¬¦ $ c ", Ġtext , Ġcurrent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġnext () ĊĠĠĠĠĠĠĠ Ġskip White () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtokens ( s : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġskip White () ĊĠĠĠĠĠĠĠ Ġfor Ġ( c Ġin Ġs ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Char Ġ!= Ġc ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠY son Error (" æľŁ æľĽ æĺ¯ åŃĹç¬¦ä¸² $ s ", Ġtext , Ġcurrent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġskip White () ĊĠĠĠ Ġ} Ċ Ċ }