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
« prev ^ index » next coverage.py v7.14.3, created at 2026-07-04 16:43 +0800
1"""
2json-toolkit — JSON 解析、查询、格式化工具。
4Category: data
5"""
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
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
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
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}"
71__all__ = ["run"]