Evaluate a simple JSON path like 'agents[0].email' or 'agents.length'.
(obj: Any, path: str)
| 49 | |
| 50 | |
| 51 | def json_path_get(obj: Any, path: str) -> Any: |
| 52 | """Evaluate a simple JSON path like 'agents[0].email' or 'agents.length'.""" |
| 53 | parts = path.split(".") |
| 54 | current = obj |
| 55 | for part in parts: |
| 56 | if part == "length": |
| 57 | return len(current) if isinstance(current, list) else None |
| 58 | m = re.match(r"^(.+)\[(\d+)\]$", part) |
| 59 | if m: |
| 60 | name, idx = m.group(1), int(m.group(2)) |
| 61 | arr = current.get(name) if isinstance(current, dict) else None |
| 62 | if not isinstance(arr, list) or idx >= len(arr): |
| 63 | return None |
| 64 | current = arr[idx] |
| 65 | else: |
| 66 | if not isinstance(current, dict): |
| 67 | return None |
| 68 | current = current.get(part) |
| 69 | return current |
| 70 | |
| 71 | |
| 72 | def values_equal(json_val: Any, yaml_val: Any) -> bool: |