extractors.py 959 B

1234567891011121314151617181920212223242526272829
  1. from jsonpath_ng import parse
  2. def safe_extract(json_obj, path, default=None):
  3. """
  4. 安全提取单个字段值,返回匹配到的第一个,否则返回默认值。
  5. :param json_obj: 输入的 JSON 对象
  6. :param path: JSONPath 表达式
  7. :param default: 提取失败时返回的默认值
  8. :return: 提取结果或默认值
  9. """
  10. try:
  11. jsonpath_expr = parse(path)
  12. match = jsonpath_expr.find(json_obj)
  13. if match:
  14. return match[0].value
  15. except Exception as e:
  16. print(f"[extractor] Error extracting {path}: {e}")
  17. return default
  18. def extract_multiple(json_obj, fields: dict) -> dict:
  19. """
  20. 根据字段配置提取多个字段。
  21. :param json_obj: 输入的 JSON 对象
  22. :param fields: 字段配置,如 {"title": "$.title", "id": "$.id"}
  23. :return: 字段名 -> 提取值的字典
  24. """
  25. return {key: safe_extract(json_obj, path) for key, path in fields.items()}