JSON 转 CSV API 调用示例
选择语言,在环境变量中设置 TABLECONVERT_API_KEY 后运行请求。各示例均将 CSV 响应保存为 output.csv。
cURL 快速开始
curl --fail-with-body --max-time 40 \
'https://api.tableconvert.com/v2/convert/json-to-csv' \
--header "Authorization: Bearer $TABLECONVERT_API_KEY" \
--form-string 'data=[{"name":"Alice","email":"alice@example.com","active":true},{"name":"Bob","email":"bob@example.com","active":false}]' \
--output output.csv需要 cURL。使用 --form-string 发送 JSON 文本,由 cURL 自动设置 multipart boundary。
Python 调用示例
import json
import os
from pathlib import Path
import requests
rows = [
{"name": "Alice", "email": "alice@example.com", "active": True},
{"name": "Bob", "email": "bob@example.com", "active": False},
]
response = requests.post(
"https://api.tableconvert.com/v2/convert/json-to-csv",
headers={
"Authorization": f"Bearer {os.environ['TABLECONVERT_API_KEY']}"
},
files={"data": (None, json.dumps(rows))},
timeout=40,
)
response.raise_for_status()
Path("output.csv").write_bytes(response.content)需要 Python 3 与 requests 库:pip install requests。
Node.js 请求示例
import { writeFile } from "node:fs/promises";
const rows = [
{ name: "Alice", email: "alice@example.com", active: true },
{ name: "Bob", email: "bob@example.com", active: false },
];
const form = new FormData();
form.set("data", JSON.stringify(rows));
const response = await fetch(
"https://api.tableconvert.com/v2/convert/json-to-csv",
{
method: "POST",
headers: {
Authorization: "Bearer " + process.env.TABLECONVERT_API_KEY,
},
body: form,
signal: AbortSignal.timeout(40_000),
},
);
if (!response.ok) {
throw new Error("HTTP " + response.status + ": " + await response.text());
}
await writeFile("output.csv", Buffer.from(await response.arrayBuffer()));使用 Node.js 20 及以上版本内置的 fetch 和 FormData。
鉴权与响应格式
通过 Authorization: Bearer 请求头发送 API Key。v2 请求成功后,响应正文直接为 CSV 文本,而非 JSON 包装或下载链接。
生产环境请将 API Key 存放在服务端环境变量中。不要将密钥写入公开代码仓库或 URL。
请求参数
使用 multipart/form-data 发送请求,从 data、file、url 中选择一种输入来源。不要手动设置 Content-Type,请由 HTTP 客户端生成 multipart boundary。
| 参数 | 类型 | 说明 |
|---|---|---|
data | string | JSON 文本。建议使用非空的平铺对象数组表示多条记录。 |
file | binary | .json 文件上传。cURL 可使用 file=@records.json。 |
url | string | 可公开访问的 JSON 文件 HTTP 或 HTTPS URL。 |
三种输入任选其一
CSV 输出选项
通过以下可选表单字段控制 CSV 输出。这里的默认值与本页示例一致。
| 参数 | 默认值 | 说明 |
|---|---|---|
output[doubleQuote]boolean | true | 为每个字段添加双引号。内部双引号不会自动转义,请在转换前规范化这类值。 |
output[bom]boolean | false | 在输出前添加 UTF-8 BOM,适用于部分 Excel 导入流程。 |
output[valueDelimiter]string | , | 使用逗号、分号或 TAB 分隔列。 |
output[rowDelimiter]string | NEWLINE | 行分隔符。NEWLINE 对应 CRLF 换行。 |
output[prefix]string | 空字符串 | 每行开头添加的文本。 |
output[suffix]string | 空字符串 | 每行末尾添加的文本。 |
嵌套 JSON 与字段映射
此接口用于转换表格记录。从 API、数据库或应用导出数据前,请核对以下映射规则。
| 输入情况 | CSV 中的结果 |
|---|---|
| 对象包含不同的键 | 使用全部键的并集,列顺序按各键首次出现的顺序排列。 |
| 缺少字段 | 对应单元格为空。 |
| null | 输出文本 null,而非空白单元格。 |
| 数字与布尔值 | 转换为文本,例如 42、true 和 false。 |
| 嵌套对象 | 不会自动展平,对应单元格为 [object Object]。请先整理为平铺记录。 |
| 字段中的数组 | 不会展开成多行,数组元素转换为逗号分隔的字符串。 |
| 值中包含双引号 | 内部双引号不会自动转义,请在导出前规范化或移除。 |
需要提取嵌套 JSON 中的字段?
发送请求前,先准备好需要的列。下例将 profile.city 提取为 city 列,无需添加不存在的 flatten 参数。
const records = [
{ name: "Alice", profile: { city: "London" } },
];
const rows = records.map(({ name, profile }) => ({
name,
city: profile.city,
}));
// Send JSON.stringify(rows) in the data form field.响应与错误处理
保存响应前先检查 HTTP 状态码。v2 成功响应使用 text/plain;错误响应正文包含纯文本消息。
| 状态码 | 含义 | 处理建议 |
|---|---|---|
200 | text/plain; charset=utf-8 | CSV 输出 |
400 | 缺少 API Key 或请求不受支持 | 添加 Bearer 请求头,并核对输入字段。 |
403 | API Key 无效 | 在账户中核对密钥。 |
402 | 积分不足 | 检查积分余额或套餐后再重试。 |
413 | 输入超出大小限制 | 核对下方文件和文本字段限制。 |
415 | 请求编码不受支持 | 按文档使用 multipart/form-data。 |
429 | 请求过于频繁 | 稍候再试,避免立即循环重试。 |
500 | JSON 解析或转换失败 | 校验 JSON,并发送非空的记录数组。 |
503 | 转换超时或服务暂时不可用 | 减少输入数据或稍后重试。 |
大小限制与用量
文件上传最大为 50 MiB(52,428,800 字节)。multipart 中单个文本字段最大为 1 MiB;较大的 JSON 请使用文件上传。v2 的服务端处理期限为 30 秒。
标准 JSON 转 CSV 请求每次成功消耗 1 积分,失败或超时后释放预留积分。历史账户条款可能不同,请查看账户与当前定价。
查看 API 定价接入前的常见问题
此 API 会自动展平嵌套 JSON 吗?
不会。发送记录前,请先将嵌套对象整理为需要的列。上方映射表与预处理示例说明了当前行为。
如何上传 JSON 文件,而非粘贴数据?
使用 file 表单字段并省略 data。cURL 中可将 --form-string 'data=…' 替换为 --form 'file=@records.json;type=application/json'。
如何生成适用于 Excel 的分号分隔 CSV?
在 multipart 表单中添加 output[valueDelimiter]=;。如果 Excel 导入流程需要 UTF-8 BOM,再设置 output[bom]=true。
没有 API Key 也能体验示例吗?
可以。“预览示例”在浏览器中转换平铺记录,不调用 API。“发送 API 请求”需要你的密钥,并按正常 API 规则计费。