U
e5d¸0 ã @ s d Z ddlZddlmZ zddlmZ W n ek
r@ dZY nX ddgZej ej
B ejB Ze
dƒZe
dƒZe
d ƒZG d
d„ deƒZeeedœZe de¡Zd
ddddddddœZdd„ Zdeejfdd„ZepÒeZe de¡ZdZdejefdd„Zejefdd „ZG d!d„ deƒZdS )"zImplementation of JSONDecoder
é N)Úscanner)Ú
scanstringÚJSONDecoderÚJSONDecodeErrorÚnanÚinfz-infc @ s e Zd ZdZdd„ Zdd„ ZdS )r a Subclass of ValueError with the following additional properties:
msg: The unformatted error message
doc: The JSON document being parsed
pos: The start index of doc where parsing failed
lineno: The line corresponding to pos
colno: The column corresponding to pos
c C sb | dd|¡d }|| dd|¡ }d||||f }t | |¡ || _|| _|| _|| _|| _d S )NÚ
r é z%s: line %d column %d (char %d)) ÚcountÚrfindÚ
ValueErrorÚ__init__ÚmsgÚdocÚposÚlinenoÚcolno)Úselfr r r r r Úerrmsg© r ú$/usr/lib64/python3.8/json/decoder.pyr
s zJSONDecodeError.__init__c C s | j | j| j| jffS )N)Ú __class__r r r )r r r r Ú
__reduce__* s zJSONDecodeError.__reduce__N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r
r r r r r r s
)z -InfinityZInfinityÚNaNz(.*?)(["\\\x00-\x1f])ú"ú\ú/úúr ú
ú )r r r ÚbÚfÚnÚrÚtc C sb | |d |d … }t |ƒdkrN|d dkrNzt|dƒW S tk
rL Y nX d}t|| |ƒ‚d S )Nr é é ZxXé zInvalid \uXXXX escape)ÚlenÚintr r )Úsr Úescr r r r Ú
_decode_uXXXX; s r1 Tc C s¶ g }|j }|d }|| |ƒ}|dkr0td| |ƒ‚| ¡ }| ¡ \} }
| rP|| ƒ |
dkr^�q¨n.|
dkrŒ|r‚d |
¡}t|| |ƒ‚n
||
ƒ qz| | }W n" tk
rº td| |ƒd‚Y nX |dk�rz|| }
W n* tk
rü d |¡}t|| |ƒ‚Y nX |d7 }n–t| |ƒ}|d 7 }d
| k�r2dk�r–n n`| ||d … d
k�r–t| |d ƒ}d| k�rrdk�r–n n d|d
d> |d B }|d7 }t|ƒ}
||
ƒ qd |¡|fS )a® Scan the string s for a JSON string. End is the index of the
character in s after the quote that started the JSON string.
Unescapes all valid JSON string escape sequences and raises ValueError
on attempt to decode an invalid string. If strict is False then literal
control characters are allowed in the string.
Returns a tuple of the decoded string and the index of the character in s
after the end quote.r NzUnterminated string starting atr r z"Invalid control character {0!r} atÚuzInvalid \escape: {0!r}r* i Ø iÿÛ é z\ui Ü iÿß i é
é Ú )
Úappendr ÚendÚgroupsÚformatÚ
IndexErrorÚKeyErrorr1 ÚchrÚjoin)r/ r8 ÚstrictZ_bÚ_mZchunksÚ_appendZbeginÚchunkZcontentÚ
terminatorr r0 ÚcharZuniZuni2r r r Ú
py_scanstringE sX
ÿÿ
2
rE z
[ \t\n\r]*z
c
C sÊ | \}} g }
|
j }|d kri }|j}|| | d … }
|
dkrº|
|krb||| ƒ ¡ } || | d … }
|
dkr¦|d k r†||
ƒ}|| d fS i }
|d k rš||
ƒ}
|
| d fS |
dkrºtd|| ƒ‚| d7 } t|| |ƒ\}} |||ƒ}|| | d … dk�r"||| ƒ ¡ } || | d … dk�r"td|| ƒ‚| d7 } z:|| |k�rb| d7 } || |k�rb||| d ƒ ¡ } W n tk
�rz Y nX z||| ƒ\}} W n4 tk
�r } ztd||jƒd ‚W 5 d }~X Y nX |||fƒ z0|| }
|
|k�rþ||| d ƒ ¡ } || }
W n tk
�r d}
Y nX | d7 } |
dk�r4�qŽn|
d k�rNtd
|| d ƒ‚||| ƒ ¡ } || | d … }
| d7 } |
dkrÂtd|| d ƒ‚qÂ|d k �r¨||
ƒ}|| fS t|
ƒ}
|d k �rÂ||
ƒ}
|
| fS )Nr r Ú}z1Expecting property name enclosed in double quotesú:zExpecting ':' delimiterúExpecting valuer6 ú,úExpecting ',' delimiter) r7 Ú
setdefaultr8 r r r; Ú
StopIterationÚvalueÚdict)Ú s_and_endr? Ú scan_onceÚobject_hookÚobject_pairs_hookÚmemoÚ_wÚ_wsr/ r8 ZpairsZpairs_appendZmemo_getÚnextcharÚresultÚkeyrM Úerrr r r Ú
JSONObjectˆ s’ ÿ
"
ÿ
rZ c
C st | \}}g }|||d … }||krF|||d ƒ ¡ }|||d … }|dkrZ||d fS |j}z|||ƒ\} }W n2 tk
r¤ }
ztd||
jƒd ‚W 5 d }
~
X Y nX || ƒ |||d … }||krè|||d ƒ ¡ }|||d … }|d7 }|dkrþ�qln|dk�rtd||d ƒ‚z:|| |k�rP|d7 }|| |k�rP|||d ƒ ¡ }W q` tk
�rh Y q`X q`||fS )Nr ú]rH rI rJ )r8 r7 rL r rM r; )rO rP rT rU r/ r8 ÚvaluesrV rA rM rY r r r Ú JSONArrayÙ s> "
r] c @ s@ e Zd ZdZdddddddœdd„Zejfdd„Zdd
d„ZdS )
r a Simple JSON