Coverage for agentos/marketplace/skills/json-toolkit/json-toolkit.py: 46%

57 statements  

« prev     ^ index     » next       coverage.py v7.14.3, created at 2026-07-04 16:43 +0800

1""" 

2json-toolkit — JSON 解析、查询、格式化工具。 

3 

4Category: data 

5""" 

6 

7 

8def run(action: str, file_path: str = "", json_str: str = "", query: str = "", 

9 output_path: str = "", indent: int = 2) -> str: 

10 """JSON 操作工具。action: parse/query/format/validate。query 用点号路径如 'users.0.name'。""" 

11 import json, os 

12 

13 def _load(): 

14 if file_path and os.path.isfile(file_path): 

15 with open(file_path,"r",encoding="utf-8") as f: 

16 return json.load(f) 

17 if json_str: 

18 return json.loads(json_str) 

19 return None 

20 

21 def _query_path(obj, path): 

22 for key in path.split("."): 

23 if obj is None: return None 

24 if isinstance(obj,list): 

25 try: obj = obj[int(key)] 

26 except (ValueError,IndexError): return None 

27 elif isinstance(obj,dict): 

28 obj = obj.get(key) 

29 else: return None 

30 return obj 

31 

32 try: 

33 if action == "validate": 

34 data = _load() 

35 if data is None: return "[json-toolkit] 无有效输入" 

36 return f"有效 JSON。类型: {type(data).__name__}" 

37 if action == "format": 

38 data = _load() 

39 if data is None: return "[json-toolkit] 无有效输入" 

40 formatted = json.dumps(data, ensure_ascii=False, indent=indent) 

41 if output_path: 

42 with open(output_path,"w",encoding="utf-8") as f: f.write(formatted) 

43 return f"已格式化写入: {output_path}" 

44 return formatted 

45 if action == "query": 

46 data = _load() 

47 if data is None: return "[json-toolkit] 无有效输入" 

48 if not query: return "[json-toolkit] query 不能为空" 

49 result = _query_path(data, query) 

50 if result is None: 

51 return f"[json-toolkit] 路径 '{query}' 无匹配" 

52 if isinstance(result,(dict,list)): 

53 return json.dumps(result, ensure_ascii=False, indent=indent) 

54 return str(result) 

55 if action == "parse": 

56 data = _load() 

57 if data is None: return "[json-toolkit] 无有效输入" 

58 if isinstance(data, dict): 

59 keys = list(data.keys()) 

60 return f"JSON 对象, {len(keys)} 个顶层键: {', '.join(keys[:30])}" 

61 if isinstance(data, list): 

62 return f"JSON 数组, {len(data)} 个元素" 

63 return f"JSON 值: {data}" 

64 return f"[json-toolkit] 未知操作: {action}, 支持: parse/query/format/validate" 

65 except json.JSONDecodeError as e: 

66 return f"[json-toolkit] JSON 解析错误: {e}" 

67 except Exception as e: 

68 return f"[json-toolkit] 失败: {e}" 

69 

70 

71__all__ = ["run"]