
omdsh-dev/dsh-tool-json
30最近提交 2026年8月14日
dsh-tool-json DSH 插件
本插件提供 `json` 工具,让 DSH Agent 可以用路径表达式查询 JSON 结构,语法类似 JMESPath。它旨在替代启动 bash 进程执行 `node -e` 或 `jq` 的方式,更加轻量安全。采用手写递归下降解析器,无 eval,防止原型链污染,并设有资源上限。
如何安装 dsh-tool-json DSH 插件
dsh plugin --profile web add github:omdsh-dev/dsh-tool-json复制不会执行命令。安装 dsh-tool-json DSH 插件前请核对仓库和版本。
dsh-tool-json DSH 插件数据来源
dsh-tool-json DSH 插件快照日期:2026年8月16日
discovered
dsh-tool-json DSH 插件能做什么
- 使用点号、方括号索引、方括号属性、数组通配符投影等方式查询 JSON。
- 支持嵌套组合,例如 `a.b[0].c.d`。
- 接受对象(模型直接生成)或字符串(bash/read 透传)两种输入形态。
- 资源上限限制:查询表达式长度 ≤200 字符、深度 ≤20 层、输入 ≤1MB、嵌套深度 ≤100、通配符投影 ≤100,000 元素。
- 错误分类清晰:缺失属性、类型不匹配、索引越界、查询语法错误等。
dsh-tool-json DSH 插件适合哪些场景
- 从 API 返回的 JSON 中提取特定字段,无需调用外部工具如 jq 或 node。
- 查询 JSON 格式的配置文件,获取下游任务所需的设置项。
- 验证或检查工具输出的 JSON 内容,使用结构化路径而非正则匹配。
- 通过通配符投影提取数组元素属性,例如 `items[*].name`。
- 调试复杂嵌套 JSON 结构,使用路径表达式导航。
dsh-tool-json DSH 插件适合谁
- 需要处理 JSON 数据的 DSH Agent 开发者。
- 希望在 DSH 环境内安全、高效地查询 JSON 的用户。
dsh-tool-json DSH 插件的限制
- 只读:不能修改 JSON 字段,修改请使用 `str_replace_editor` 或 `write` 等其他工具。
- 不支持过滤器表达式(如 `[?downloads > 1000]`)、管道符或函数调用。
- 通配符仅作用于数组,不作用于对象字段;嵌套通配符返回嵌套数组,不做扁平化。
- 对象形态输入依赖 DSH 参数管线保证 JSON 无损传递。
dsh-tool-json DSH 插件的仓库 README 摘录
以下文字摘自 dsh-tool-json DSH 插件的上游仓库 omdsh-dev/dsh-tool-json 的 README,版权归原作者,仅作引用。
DSH JSON 查询工具插件 —— JMESPath-inspired 路径查询(自定义子集),零依赖递归下降解析器。 [](LICENSE) ## 为什么需要 Agent 处理 JSON 是高频操作——API 返回值、配置文件、工具输出到处都是 JSON。当前做法是起 bash 进程跑 `node -e` 或 `jq`,每次都有进程开销和字符串序列化成本。 DSH 内置 `grep` 可以做正则匹配,但无法理解 JSON 结构。对于 `{"items":[{"id":1}]}`: - `grep` 只能做字符串级搜索,容易误匹配值、key、或嵌套子对象中的同名 key - `json` 走结构化路径,只匹配指定路径,不混淆 key 和 value ## 安全模型 手写递归下降解析器,无 `eval`/`new Function`;`Object.hasOwn` 防原型链污染(`constructor`/`__proto__` 读取不触发原型链)。资源上限(**对象与字符串两条输入路径统一执行**): - 查询表达式长度 ≤ 200 字符、解析深度 ≤ 20 层、数组索引必须是安全整数 - 字符串输入 ≤ 1,000,000 bytes(UTF-8);输入嵌套深度 ≤ 100 - 单次 wildcard 投影 ≤ 100,000 元素 - 只接受 JSON-compatible 值(null/boolean/有限 number/string/array/plain object;拒绝 undefined/BigInt/函数/Date/非有限数) 错误分类(`JsonQueryError`):`MISSING_PROPERTY`(投影内跳过)、`TYPE_MISMATCH`/`INDEX_OUT_OF_BOUNDS`/`INVALID_QUERY`(如实抛错),统一 `json:` 前缀。 > 成本模型(AUDIT-JSON-03):输入在每次查询前执行**全量校验**(类型/深度/字节/循环/枚举性)——这是有意的安全成本,查询小字段也会完整扫描输入;`timeoutMs` 无法中断同步校验。 ## 架构 ``` DSH Agent │ ctx.tools.register() ▼ src/index.ts(Cordis 插件入口 + action 分发) │ ▼ src/query.ts ├── parseQuery() — 递归下降解析器(strict 语法 + 转义 + 上限) ├── executeQuery() — 执行器(错误分类 + 投影上限)
阅读完整 README仓库许可: MIT
dsh-tool-json DSH 插件常见问题
如何安装 dsh-tool-json 插件?
通过 DSH 命令行安装:`dsh plugin --profile web add github:omdsh-dev/dsh-tool-json`(web 配置)或 `dsh plugin --profile headless add github:omdsh-dev/dsh-tool-json`(headless 配置)。安装后运行 `dsh --profile web --dump-config | grep tool-json` 验证。
json 工具支持什么查询语法?
支持自定义的 JMESPath 子集语法:点号访问嵌套对象(如 `foo.bar`)、方括号数组索引(如 `items[0]`)、方括号属性访问特殊字符键(如 `items['key']`)、数组通配符投影(如 `items[*].name`)。不支持过滤器、管道符或函数调用。
json 工具能修改 JSON 数据吗?
不能,工具是只读的。如果需要修改 JSON,请使用其他 DSH 工具如 `str_replace_editor` 或 `write`。未来版本可能增加 `set` 模式。
json 工具有哪些输入限制?
查询表达式长度 ≤200 字符,深度 ≤20 层。输入字符串 ≤1,000,000 字节(UTF-8),嵌套深度 ≤100。通配符投影最多 100,000 个元素。每次查询前会完整扫描输入,这是有意为之的安全开销。
json 工具如何处理错误?
错误分为几类:`MISSING_PROPERTY`(在投影内跳过)、`TYPE_MISMATCH`、`INDEX_OUT_OF_BOUNDS`、`INVALID_QUERY`(这些会抛出)。所有错误带 `json:` 前缀。解析器手写,无 eval,通过 `Object.hasOwn` 防止原型链污染。