# API (Excel to JSON by HTTPS POST request)
[English](https://excel-to-json.wtsolutions.cn/en/latest/API.html)
WTSolutions的Excel转JSON是一系列工具,可将Excel转换为JSON,支持转换为扁平结构和嵌套结构JSON。它提供了"Excel转JSON"的全场景解决方案,包括Excel加载项、Web应用、开放API和企业级MCP工具:
* 网络版方案
* [Web应用:直接在Web浏览器中转换Excel到JSON。](WebApp.md)
* [Excel加载项:在Excel中转换Excel到JSON,与Excel环境无缝集成。](ExcelAddIn.md)
* [WPS加载项:在WPS中转换Excel到JSON,与WPS环境无缝集成。](WPSAddIn.md)
* API:通过HTTPS POST请求转换Excel到JSON。 (<-- 您当前所在位置。)
* [MCP服务:通过AI模型MCP请求转换Excel到JSON。](MCP.md)
* 本地版方案
* [本地化应用:在本地安装 Excel 转 JSON 应用,支持离线转换。](LocalApp.md)
* [本地化 Excel 加载项:在 Excel 中转换 Excel 为 JSON,与 Excel 环境无缝集成, 支持离线转换。](LocalExcelAddin.md)
* [本地化 WPS 加载项:在 WPS 中转换 Excel 为 JSON,与 WPS 环境无缝集成, 支持离线转换。](LocalWPSAddin.md)
## 请求
需要HTTPS POST请求工具,如Postman、Curl、Python Requests、Javascript fetch等。智能体平台如coze。
确保通过设置CORS头来正确处理跨域问题。
## 访问方式
向访问点 `https://mcp.wtsolutions.cn/excel-to-json-api` 发送`POST`请求,并包含使用部分中描述的必要参数。
## 使用方法
### 请求格式
API接受包含以下参数之一的`application/json`格式的POST请求:
| 参数 | 类型 | 是否必填 | 描述 |
|------|------|----------|------|
| data | 字符串 | 否 | 制表符分隔或逗号分隔的文本数据,至少包含两行(标题行+数据行)。必须提供'data'或'url'中的一个 |
| url | 字符串 | 否 | 指向Excel或CSV文件的URL。必须提供'data'或'url'中的一个 |
| options | 对象 | 是 | 用于自定义转换过程的配置对象 |
> 注意:
> - 请提供`data`或`url`中的一个,不要同时提供。
> - 如果您想使用自定义转换设置,则`options`是必需的。
> - 如果您想使用专业版,则需要提供有效的[Pro Code](profeatures.md#pro-code),可以享受无限制的数据转换。
#### 对data和url的要求
发送`data`时:
- 输入数据必须是制表符分隔(Excel)或逗号分隔(CSV)的文本,至少包含两行(标题行+数据行)或两列(标题列+数据列),具体取决于options参数中的"header"设置。
1. 第一行或第一列将被视为"标题"行/列,API将使用它作为列名,即JSON键。
2. 后续行或列将被视为"数据"行/列,API将把它们视为JSON值。
发送`url`时:
- Excel文件的每个工作表应至少包含两行或两列(标题行/列+数据行/列)。
1. 第一行或第一列将被视为"标题"行/列,API将使用它作为列名,即JSON键。
2. 后续行或列将被视为"数据"行/列,API将把它们视为JSON值。
- 此Excel文件应为'.xlsx'格式。
- Excel文件的每个工作表将被转换为一个JSON对象。
- 每个JSON对象将具有'sheetName'(字符串)和'data'属性。
- 'data'数组中的每个JSON对象将具有与标题名称对应的属性。
- 'data'数组中的每个JSON对象将具有与单元格值对应的值。
### 选项对象
可选的`options`对象可以包含以下属性:
| 属性 | 类型 | 默认值 | 描述 |
|------|------|--------|------|
| [proCode](profeatures.md#pro-code) | 字符串 | "" | 用于使用专业版,需要有效的[Excel转JSON服务订阅](pricing.md)。proCode可以通过options中参数传递,也可以在https请求头中传递proCode。 |
| [jsonMode](profeatures.md#id5) | 字符串 | "flat" | JSON输出的格式模式:"nested"(嵌套)或"flat"(扁平) |
| [header](profeatures.md#id4) | 字符串 | "row" | 指定使用哪一行/列作为标题:"row"(第一行)或"column"(第一列) |
| [delimiter](profeatures.md#json) | 字符串 | "." | 当使用`jsonMode`为"nested"时,嵌套JSON键的分隔符,可接受的分隔符有"."、"_"、"__"、"/"。 |
| [emptyCell](profeatures.md#id6) | 字符串 | "emptyString" | 空单元格的处理方式:"emptyString"(空字符串)、"null"(空值)或"exclude"(排除) |
| [booleanFormat](profeatures.md#id7) | 字符串 | "trueFalse" | 布尔值的格式:"trueFalse"(true/false)、"10"(1/0)或"string"(字符串) |
| [jsonFormat](profeatures.md#id9) | 字符串 | "arrayOfObject" | JSON输出的整体格式:"arrayOfObject"(对象数组)或"2DArray"(二维数组) |
| [singleObjectFormat](profeatures.md#id10) | 字符串 | "array" | 当结果只有一个对象时的格式:"array"(保持为数组)或"object"(返回为单个对象) |
> 注意:
> - `proCode`可以在options中参数传递,也可以在https请求头中传递proCode。
> - `delimiter`仅在`jsonMode`为"nested"时有效。
> - `singleObjectFormat`仅在`jsonFormat`为"arrayOfObject"时有效。
> - `jsonFormat`为"2DArray"仅在`jsonMode`为"flat"时有效。
> - `proCode`不是必需的,如果没有提供proCode,最多转换6行数据。
> - 详细的转换规则可以在[转换设置](profeatures.md)中找到。
### 响应格式
API返回具有以下结构的JSON对象:
| 字段 | 类型 | 描述 |
|------|------|------|
| isError | 布尔值 | 指示处理请求时是否出错 |
| msg | 字符串 | 'success'或错误描述 |
| data | 字符串 | 如果使用URL,则为工作表对象数组;如果使用直接数据,则为字符串;如果出错,则为空字符串。|
### 示例
#### 使用'data'的请求示例
原始数据:
| id | student.name | student.familyname | student.age |
|----|--------------|--------------------|-------------|
| 1 | Meimei | Han | 12 |
| 2 | Lily | Jaskson | 15 |
| 3 | Elon | Mask | 18 |
请求1:
```json
{
"data": "id\tstudent.name\tstudent.familyname\tstudent.age\n1\tMeimei\tHan\t12\n2\tLily\tJaskson\t15\n3\tElon\tMask\t18",
"options": {
"proCode": "proCode(please input your proCode)",
"jsonMode": "nested",
"delimiter": "."
}
}
```
响应1:
```json
{
"isError": false,
"msg": "success",
"data": "[{\"id\":1,\"student\":{\"name\":\"Meimei\",\"familyname\":\"Han\",\"age\":12}},{\"id\":2,\"student\":{\"name\":\"Lily\",\"familyname\":\"Jaskson\",\"age\":15}},{\"id\":3,\"student\":{\"name\":\"Elon\",\"familyname\":\"Mask\",\"age\":18}}]"
}
```
请求2:
```json
{
"data": "id\tstudent.name\tstudent.familyname\tstudent.age\n1\tMeimei\tHan\t12\n2\tLily\tJaskson\t15\n3\tElon\tMask\t18",
"options": {
"proCode": "proCode(please input your proCode)",
"jsonMode": "flat",
"jsonFormat": "2DArray"
}
}
```
响应2:
```json
{
"isError": false,
"msg": "success",
"data": "[[\"id\",\"student.name\",\"student.familyname\",\"student.age\"],[1,\"Meimei\",\"Han\",12],[2,\"Lily\",\"Jaskson\",15],[3,\"Elon\",\"Mask\",18]]"
}
```
#### 使用'url'的成功响应示例(多工作表Excel)
`Sheet1`中的原始Excel数据:
| Name | Age | IsStudent |
|------------|-----|-----------|
| John Doe | 25 | false |
| Jane Smith | 30 | true |
`Sheet2`中的原始Excel数据:
| ID | Value |
|----|---------|
| 1 | Example |
请求:
```json
{
"url": "https://tools.wtsolutions.cn/example.xlsx",
"options": {
"proCode": "proCode(please input your proCode)",
"booleanFormat": "10",
"jsonFormat": "arrayOfObject",
"singleObjectFormat": "object"
}
}
```
响应:
```json
{
"isError": false,
"msg": "success",
"data": "[{\"sheetName\":\"Sheet1\",\"data\":[{\"Name\":\"John Doe\",\"Age\":25,\"IsStudent\":0},{\"Name\":\"Jane Smith\",\"Age\":30,\"IsStudent\":1}]},{\"sheetName\":\"Sheet2\",\"data\":{\"ID\":1,\"Value\":\"Example\"}}]"
}
```
#### 错误响应示例
```json
{
"isError": true,
"msg": "Excel数据至少需要2行",
"data": ""
}
```
### 数据类型处理
此API的标准方式会自动检测并转换不同的数据类型,而在专业方式中,用户可以通过在请求体中提供'options'对象来自定义转换规则。
- **数字**:转换为数值
- **布尔值**:识别'true'/'false'(不区分大小写)并转换为布尔值
- **日期**:检测各种日期格式并适当转换
- **字符串**:视为字符串值
- **空值**:表示为空字符串
## 错误处理
API针对常见问题返回描述性错误消息:
- `Excel Data Format Invalid`:当输入数据不是制表符分隔或逗号分隔时
- `At least 2 rows are required`:当输入数据少于2行时
- `Both data and url received`:当同时提供'data'和'url'参数时
- `Network Error when fetching file`:从提供的URL下载文件时出错
- `File not found`:找不到提供的URL上的文件
- `Blank/Null/Empty cells in the first row not allowed`:当标题行包含空单元格时
- `Server Internal Error`:发生意外错误时
- `Max 6 rows handled, upgrade to Pro to handle more rows`:当未提供有效专业代码时,最多处理6行数据, 可升级至专业版处理更多数据。
## 使用视频
本视频展示的是在agents智能体平台coze上,利用本api创作的插件和智能体的使用。
[更多视频](https://s.wtsolutions.cn/images/videoqrcodes.png)