@@ -25,39 +25,15 @@ class _String:
2525 def __init__ (self , value ):
2626 self .value = value
2727
28- def _resolver (input , lazy , parsed ):
29- ignore = {}
30-
31- def resolver (output ):
32- keys = _array_keys (output ) if _is_array (output ) else _object_keys (output ) if _is_object (output ) else []
33- for key in keys :
34- value = output [key ]
35- if isinstance (value , _String ):
36- tmp = input [int (value .value )]
37- if (_is_array (tmp ) or _is_object (tmp )) and tmp not in parsed :
38- parsed .append (tmp )
39- output [key ] = ignore
40- lazy .append ([output , key , tmp ])
41- else :
42- output [key ] = tmp
43-
44- return output
45-
46- return resolver
47-
4828def _array_keys (value ):
49- keys = []
5029 i = 0
5130 for _ in value :
52- keys . append ( i )
31+ yield i
5332 i += 1
54- return keys
5533
5634def _object_keys (value ):
57- keys = []
5835 for key in value :
59- keys .append (key )
60- return keys
36+ yield key
6137
6238def _is_array (value ):
6339 return isinstance (value , (list , tuple ))
@@ -84,6 +60,22 @@ def _relate(known, input, value):
8460
8561 return value
8662
63+ def _resolver (input , lazy , parsed ):
64+ def resolver (output ):
65+ keys = _array_keys (output ) if _is_array (output ) else _object_keys (output ) if _is_object (output ) else []
66+ for key in keys :
67+ value = output [key ]
68+ if isinstance (value , _String ):
69+ tmp = input [int (value .value )]
70+ output [key ] = tmp
71+ if (_is_array (tmp ) or _is_object (tmp )) and tmp not in parsed :
72+ parsed .append (tmp )
73+ lazy .append ([output , key ])
74+
75+ return output
76+
77+ return resolver
78+
8779def _transform (known , input , value ):
8880 if _is_array (value ):
8981 output = []
@@ -136,9 +128,9 @@ def parse(value, *args, **kwargs):
136128
137129 i = 0
138130 while i < len (lazy ):
139- o , k , r = lazy [i ]
131+ o , k = lazy [i ]
140132 i += 1
141- o [k ] = revive (r )
133+ o [k ] = revive (o [ k ] )
142134
143135 return value
144136
0 commit comments