|
2 | 2 | Author : zhangxianbing1 |
3 | 3 | Date : 2020-12-27 09:22:14 |
4 | 4 | LastEditors : zhangxianbing1 |
5 | | -LastEditTime : 2021-01-04 10:27:22 |
| 5 | +LastEditTime : 2021-01-04 10:50:28 |
6 | 6 | Description : JSONPath |
7 | 7 | """ |
8 | 8 | __version__ = "0.0.2" |
@@ -212,20 +212,28 @@ def _trace(self, obj, i: int): |
212 | 212 | # sort |
213 | 213 | if step.startswith("/(") and step.endswith(")"): |
214 | 214 | if isinstance(obj, list): |
215 | | - step = step[2:-1] |
216 | | - for sortby in step.split(",")[::-1]: |
| 215 | + for sortby in step[2:-1].split(",")[::-1]: |
217 | 216 | if sortby.startswith("~"): |
218 | 217 | obj.sort( |
219 | 218 | key=lambda t, k=sortby: _getattr(t, k[1:]), reverse=True |
220 | 219 | ) |
221 | 220 | else: |
222 | 221 | obj.sort(key=lambda t, k=sortby: _getattr(t, k)) |
223 | | - |
| 222 | + elif isinstance(obj, dict): |
| 223 | + obj = [(k, v) for k, v in obj.items()] |
| 224 | + for sortby in step[2:-1].split(",")[::-1]: |
| 225 | + if sortby.startswith("~"): |
| 226 | + obj.sort( |
| 227 | + key=lambda t, k=sortby: _getattr(t[1], k[1:]), reverse=True |
| 228 | + ) |
| 229 | + else: |
| 230 | + obj.sort(key=lambda t, k=sortby: _getattr(t[1], k)) |
| 231 | + obj = {k: v for k, v in obj} |
224 | 232 | self._traverse(self._trace, obj, i + 1) |
225 | 233 | return |
226 | 234 |
|
227 | 235 |
|
228 | 236 | if __name__ == "__main__": |
229 | 237 | with open("test/data/2.json", "rb") as f: |
230 | 238 | d = json.load(f) |
231 | | - JSONPath("$.book[/(price)].price").parse(d) |
| 239 | + JSONPath("$.scores[/(score)].score").parse(d) |
0 commit comments