JSON 处理接口。单端点支持四种动作:格式化、压缩、校验、JSONPath 取值,全部为后端纯字符串/对象计算,不依赖外部网络。
鉴权
所有接口均需在请求头中携带访问令牌:
Authorization: Bearer tf_xxxxxxxxxxxxxxxx
令牌在 用户设置 → 访问令牌 页面创建,创建时需勾选对应权限:
| 权限 | 说明 |
|---|---|
read:tools_json |
调用 JSON 处理接口 |
频率限制
| 范围 | 上限 |
|---|---|
| 单用户 / 单分钟 | 60 次 |
| 单用户 / 单日 | 2000 次 |
超限返回 429。
接口列表
1. 处理 JSON
POST /api/tools/json/process
所需权限:read:tools_json
通过 action 字段切换不同处理动作,未来扩展(如 diff / patch)不会新增路由。
请求体(JSON)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
action |
string | 是 | 取值:format / minify / validate / extract |
input |
string | 是 | 待处理的 JSON 字符串 |
options |
object | 否 | 见下方各 action 子参数 |
options 字段
| 字段 | 类型 | 适用 action | 说明 |
|---|---|---|---|
indent |
integer | format、extract |
缩进空格数,取值 2 或 4,默认 2 |
sortKeys |
boolean | format |
是否递归按 key 字典序排序,默认 false |
path |
string | extract |
JSONPath 表达式,必填于 extract |
path 支持的 JSONPath 语法
| 语法 | 示例 | 含义 |
|---|---|---|
$ |
$ |
根节点 |
.key |
$.user.name |
对象字段访问 |
["key"] |
$["users"][0]["full name"] |
对象字段(支持含特殊字符的 key) |
[n] |
$.list[0], $.list[-1] |
数组下标(负数表示从末尾计数) |
[*] |
$.users[*].name |
数组通配,匹配数组所有元素 |
不支持:filter (
?(@.x>1)) / 递归 (..) / slice ([1:3])。如需完整 JSONPath 请在客户端自行处理。
返回值
format / minify
{
"success": true,
"data": {
"output": "{\n \"a\": 1\n}"
}
}
| 字段 | 类型 | 说明 |
|---|---|---|
output |
string | 处理后的 JSON 字符串 |
validate
合法时:
{
"success": true,
"data": {
"valid": true,
"error": null
}
}
非法时:
{
"success": true,
"data": {
"valid": false,
"error": {
"line": 3,
"column": 12,
"message": "Unexpected token '}' ..."
}
}
}
| 字段 | 类型 | 说明 |
|---|---|---|
valid |
boolean | 是否为合法 JSON |
error.line |
integer | 出错行号,无法定位时为 null |
error.column |
integer | 出错列号 |
error.message |
string | 原始 V8 解析错误信息 |
extract
{
"success": true,
"data": {
"path": "$.users[*].name",
"match_count": 2,
"matches": ["alice", "bob"]
}
}
| 字段 | 类型 | 说明 |
|---|---|---|
path |
string | 回显请求中的 JSONPath |
match_count |
integer | 命中节点数 |
matches |
any[] | 命中节点的值,按顺序排列;通配 [*] 时为多元素 |
示例
# 格式化(2 空格缩进,按 key 排序)
curl -X POST "https://trendforge.devlive.top/api/tools/json/process" \
-H "Authorization: Bearer tf_xxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"action": "format",
"input": "{\"z\":1,\"a\":2}",
"options": { "indent": 2, "sortKeys": true }
}'
# 压缩
curl -X POST "https://trendforge.devlive.top/api/tools/json/process" \
-H "Authorization: Bearer tf_xxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"action":"minify","input":"{\n \"a\": 1\n}"}'
# 校验
curl -X POST "https://trendforge.devlive.top/api/tools/json/process" \
-H "Authorization: Bearer tf_xxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"action":"validate","input":"{\"a\":1}"}'
# JSONPath 取值
curl -X POST "https://trendforge.devlive.top/api/tools/json/process" \
-H "Authorization: Bearer tf_xxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"action": "extract",
"input": "{\"users\":[{\"name\":\"alice\"},{\"name\":\"bob\"}]}",
"options": { "path": "$.users[*].name" }
}'
错误响应
所有错误均返回 JSON 格式:
{
"success": false,
"code": 400,
"message": "JSON 解析失败",
"detail": {
"line": 3,
"column": 12,
"message": "Unexpected token '}' ..."
}
}
当错误与输入位置相关时(JSON 解析 / JSONPath 语法),
detail字段会带详细定位;其它错误detail为null。
| HTTP 状态码 | code |
原因 |
|---|---|---|
400 |
400 | action 不在四个枚举内 / input 不是合法 JSON / path 不合法 |
401 |
401 | 未携带令牌或令牌无效 |
403 |
403 | 令牌缺少 read:tools_json 权限 |
429 |
429 | 命中分钟级或日级频率限制 |
500 |
500 | 服务器内部错误 |
数据说明
- 单次调用为内存计算,不持久化、不缓存、不上报第三方
validate错误信息来自 V8 的JSON.parse,行列号通过反查position计算得出extract的matches数组保留命中顺序,对应 JSONPath 在原 JSON 中的遍历顺序- 通配
[*]应用到对象时会枚举所有值(按Object.keys顺序),应用到数组时枚举所有元素 - 同一令牌的频率配额与同一登录会话共享