3
\)1 ã @ s d Z ddlZddlmZ yddlmZ W n ek
r@ dZY nX ddgZej ej
B ejB Ze
dƒZe
dƒZe
d ƒZG d
d„ deƒZeeedœZejdeƒZd
ddddddddœZdd„ Zdeejfdd„ZepÒeZejdeƒ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 |j dd|ƒd }||jdd|ƒ }d||||f }tj| |ƒ || _|| _|| _|| _|| _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.6/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 s` | |d |d … }t |ƒdkrL|d dkrLy
t|dƒS tk
rJ 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 }�x”|| |ƒ}|dkr4td| |ƒ‚|jƒ }|jƒ \} }
| rT|| ƒ |
dkr`P n.|
dkrŽ|r„dj|
ƒ}t|| |ƒ‚n
||
ƒ qy| | }W n tk
rº td| |ƒ‚Y nX |dk�ry|| }
W n* tk
rü dj|ƒ}t|| |ƒ‚Y nX |d7 }n–t| |ƒ}|d 7 }d
| k�o.dkn �r–| ||d … d
k�r–t| |d ƒ}d| k�ondkn �r–d|d
d> |d B }|d7 }t|ƒ}
||
ƒ qW dj |ƒ|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_bZ_mZchunksÚ_appendZbeginÚchunkZcontentÚ
terminatorr r0 ÚcharZuniZuni2r r r Ú
py_scanstringE sP
2rD z
[ \t\n\r]*z
c # C sÎ | \}} g }
|
j }|d kri }|j}|| | d … }
|
dkrº|
|krb||| ƒjƒ } || | d … }
|
dkr¦|d k r†||
ƒ}|| d fS i }
|d k rš||
ƒ}
|
| d fS |
dkrºtd|| ƒ‚| d7 } �xÌt|| |ƒ\}} |||ƒ}|| | d … dk�r&||| ƒjƒ } || | d … dk�r&td|| ƒ‚| d7 } y:|| |k�rf| d7 } || |k�rf||| d ƒjƒ } W n tk
�r~ Y nX y||| ƒ\}} W n4 tk
�rÆ } ztd||jƒd ‚W Y d d }~X nX |||fƒ y0|| }
|
|k�r||| d ƒjƒ } || }
W n tk
�r d}
Y nX | d7 } |
dk�r6P n|
d k�rPtd
|| d ƒ‚||| ƒjƒ } || | d … }
| d7 } |
dkrÆtd|| d ƒ‚qÆW |d k �r¬||
ƒ}|| fS t|
ƒ}
|d k �rÆ||
ƒ}
|
| fS )Nr r ú}z1Expecting property name enclosed in double quotesú:zExpecting ':' delimiterzExpecting valuer6 ú,zExpecting ',' 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ÚkeyrJ Úerrr r r Ú
JSONObject‡ sˆ
"
rW c C sz | \}}g }|||d … }||krF|||d ƒj ƒ }|||d … }|dkrZ||d fS |j}�xy|||ƒ\} }W n2 tk
r¨ }
ztd||
jƒd ‚W Y d d }
~
X nX || ƒ |||d … }||krì|||d ƒj ƒ }|||d … }|d7 }|dk�rP n|dk�rtd||d ƒ‚y:|| |k�rT|d7 }|| |k�rT|||d ƒj ƒ }W qd tk
�rl Y qdX qdW ||fS )Nr ú]zExpecting valuerG zExpecting ',' delimiter)r8 r7 rI r rJ r; )rL rM rQ rR r/ r8 ÚvaluesrS r@ rJ rV r r r Ú JSONArrayØ s@ "
rZ c @ s@ e Zd ZdZdddddddœdd„Zejfdd„Zdd
d„ZdS )
r a Simple JSON