Install
openclaw skills install @thcjp/csv-json-converter-freeopenclaw skills install @thcjp/csv-json-converter-free把"CSV转JSON"从翻文档半小时压缩到一条命令搞定。表头推断+类型识别+编码探测三件套。
CSV转JSON免费版解决独立开发者最常踩的三个坑:表头被当作数据行、数字字段转成字符串、GBK编码的中文乱码。本工具把这些高频操作固化为可复制模板与速查表,配以类型识别规则与编码探测流程,让Agent能直接给出可粘贴的脚本与可执行的修复建议。
直接对Agent说:
"帮我把 data.csv 转成 JSON,第一行是表头。"
Agent会按本工具的模板规则输出可执行的Python脚本:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| input | string | 是 | CSV转JSON(免费版)处理的输入数据或指令 |
| options | object | 否 | 附加配置选项,如模式选择、格式偏好等 |
| callback_url | string | 否 | 异步处理完成后的回调通知URL |
import csv, json, chardet
# ...
# 1. 自动探测编码
with open('data.csv', 'rb') as f:
raw = f.read()
encoding = chardet.detect(raw)['encoding'] or 'utf-8'
# 兼容 UTF-8-BOM
if raw[:3] == b'\xef\xbb\xbf':
encoding = 'utf-8-sig'
# ...
# 2. 读取并转换
with open('data.csv', 'r', encoding=encoding, newline='') as f:
reader = csv.DictReader(f)
rows = [dict(r) for r in reader]
# ...
# 3. 写出 JSON
with open('data.json', 'w', encoding='utf-8') as f:
json.dump(rows, f, ensure_ascii=False, indent=2)
# ...
print(f'转换完成:{len(rows)} 行 -> data.json')
把样例CSV粘给Agent:
id,name,price,active,created_at
1,张三,99.5,true,2025-01-15
2,李四,0,false,2025-02-20
Agent会按"类型识别规则"自动把 id 转为整数、price 转为浮点、active 转为布尔、created_at 转为ISO日期字符串,输出带类型转换的脚本与预览结果。
| 场景 | 推断规则 | 输出键名示例 |
|---|---|---|
| 第一行是表头 | 直接用作键名 | name、price |
| 表头含空格 | 转为下划线或驼峰 | user name → user_name 或 userName |
| 表头含特殊字符 | 仅保留字母数字下划线 | 单价(元) → price |
| 无表头 | 自动生成 col_1、col_2... | col_1、col_2 |
| 重复表头 | 追加序号后缀 | name、name_2 |
Agent执行规则:默认将表头转为snake_case;遇到中文表头时保留中文(便于业务阅读),但提供 --normalize 选项转英文拼音或自定义映射。
输入: 用户提供功能1:表头推断与键名规范化所需的指令和必要参数。 处理: 解析功能1:表头推断与键名规范化的输入参数,完成核心逻辑,返回结构化响应。 输出: 返回功能1:表头推断与键名规范化的响应数据,包含状态码、结果和日志。
四类字段的自动识别规则,转换时按此顺序匹配:
def detect_type(value: str):
"""按顺序识别字段类型"""
if value.strip() == '' or value.lower() in ('null', 'none', 'nil'):
return None
if value.lower() in ('true', 'false'):
return value.lower() == 'true'
try:
return int(value)
except ValueError:
pass
try:
return float(value)
except ValueError:
pass
# 日期识别(ISO格式优先)
for fmt in ('%Y-%m-%d', '%Y-%m-%d %H:%M:%S', '%Y/%m/%d'):
try:
from datetime import datetime
return datetime.strptime(value, fmt).isoformat()
except ValueError:
continue
return value # 保留为字符串
关键提醒:手机号、身份证号、邮编等"看起来是数字但应保留为字符串"的字段,必须显式声明 --string-fields phone,id_card,zip,否则会丢失前导零或精度。
输入: 用户提供功能2:字段类型识别所需的指令和必要参数。 处理: 解析功能2:字段类型识别的输入参数,完成核心逻辑,返回结构化响应。 输出: 返回功能2:字段类型识别的响应数据,包含状态码、结果和日志。
input_params参数,支持创建/查询/导出操作| 编码 | 探测特征 | 处理方式 |
|---|---|---|
| UTF-8 | 无BOM,字节流合法 | 直接读取 |
| UTF-8-BOM | 前3字节为 EF BB BF | 用 utf-8-sig 读取,自动剥离BOM |
| GBK/GB2312 | 含中文且非UTF-8合法序列 | 用 gbk 读取,转UTF-8写出 |
| Latin-1 | 纯英文+少量扩展字符 | 兜底编码,不报错 |
Agent执行规则:默认用 chardet 探测编码;探测置信度低于0.7时提示用户手动指定;输出JSON统一用 utf-8 编码。
输入: 用户提供功能3:编码自动探测所需的指令和必要参数。 处理: 解析功能3:编码自动探测的输入参数,完成核心逻辑,返回结构化响应。 输出: 返回功能3:编码自动探测的响应数据,包含状态码、结果和日志。
CSV的特殊字符是出错重灾区,本工具提供明确处理规则:
| 特殊场景 | CSV样例 | JSON输出 |
|---|---|---|
| 字段含逗号 | "张,三" | "张,三" |
| 字段含引号 | "他说""你好""" | "他说\"你好\"" |
| 字段含换行 | "第一行\n第二行" | "第一行\n第二行" |
| 空字段 | ,, | null 或 ""(按配置) |
| 转义反斜杠 | C:\path\to | "C:\\path\\to" |
Agent执行规则:使用 csv.DictReader 而非手动split,自动处理引号包裹与转义;空字段默认转为 null,可用 --empty-as-string 改为空字符串。
输入: 用户提供功能4:特殊字符与引号处理所需的指令和必要参数。 处理: 解析功能4:特殊字符与引号处理的输入参数,完成核心逻辑,返回结构化响应。 输出: 返回功能4:特殊字符与引号处理的响应数据,包含状态码、结果和日志。 能力覆盖范围:本skill的核心能力覆盖以下场景关键词:轻量级、覆盖表头推断、类型识别与单文件、秒上手即用、免费版是一款面向、独立开发者与数据、工程师的轻量级表、格数据格式转换工、单文件转换、结果校验、四件事、提供可复制即用的、Node、when、需要文件处理、文档转换、格式互转、内容提取时使用、不适用于加密文件、适用于独立开发者、企业团队和自动化、工作流场景等。这些关键词对应description中声明的使用场景,均已在上述能力点中提供对应的操作支持。
痛点:上游API吐CSV格式,但内部系统只吃JSON,每次手写转换脚本都踩坑。
使用方式:对Agent说"把这个CSV转成JSON给下游用",Agent按本工具的模板生成带编码探测、类型识别、空值处理的完整脚本,并附上输出样例供你校验。
效果:单次转换从平均20分钟降至2分钟。
痛点:业务方用Excel导出的CSV是GBK编码,前端fetch后中文乱码;数字字段被Excel改成科学计数法。
使用方式:把CSV样例粘给Agent,Agent识别为GBK编码,生成转码脚本,并把 id、phone 等字段强制保留为字符串,避免精度丢失。
效果:编码与精度问题一次性解决,避免线上返工。
痛点:临时加一个CSV转JSON的预处理节点,用Pandas太重,手写又怕边界情况。
使用方式:对Agent说"给我一个不依赖Pandas的CSV转JSON脚本,要处理BOM和引号",Agent输出纯标准库实现的脚本,可直接嵌入Airflow或cron任务。
效果:脚本零依赖、可移植,部署到任意环境都能跑。
不要假设CSV一定是UTF-8。Windows下Excel导出的CSV默认是GBK,Mac下可能是UTF-8-BOM。用 chardet 探测或检查前3字节是否为BOM,能避免90%的中文乱码问题。
001234、13800138000、110101199001011234 这类字段如果被识别为数字,会丢失前导零或精度。转换前明确列出需要保留为字符串的字段名。
单文件超过100MB时,不要一次性读入内存。用 csv.DictReader 逐行读取,配合 ijson 流式写出JSON数组,避免OOM。免费版提供单文件流式模板,专业版提供多文件并行流式转换。
转换完成后必须校验:行数是否一致、表头是否完整、特殊字符是否正确转义、数字字段是否丢失精度。本工具提供校验清单与脚本。
免费版不限制文件大小,但建议单文件不超过100MB。超过100MB时建议使用流式转换模板(本工具提供),避免内存溢出。专业版提供多文件并行流式转换与断点续传。
支持。免费版默认识别逗号分隔,但提供 --delimiter '\t' 参数切换为制表符。Agent会自动检测分隔符,若第一行含制表符多于逗号,则判定为TSV。
一致。Python 3.7+ 的 dict 默认保持插入顺序,csv.DictReader 按表头顺序读取,因此JSON对象的键顺序与CSV表头完全一致。若需重新排序,可用 --key-order 参数指定。
CSV本身不支持合并单元格,Excel导出CSV时会将合并单元格拆为多个单元格,仅左上角有值,其余为空。本工具按空字段处理,转为 null。若需保留合并信息,建议改用XLSX格式并用专业版的Excel转换模块。
\uXXXX 转义怎么办?这是JSON序列化时 ensure_ascii=True 导致的。本工具默认 ensure_ascii=False,输出中文原字符。若你看到转义形式,检查脚本是否漏写了这个参数。
| 依赖项 | 类型 | 是否必需 | 获取方式 |
|---|---|---|---|
| LLM API | API | 必需 | 由Agent平台内置LLM提供(免费版路由GPT-4o-mini) |
| chardet | Python库 | 推荐 | pip install chardet(编码探测) |
| csv | Python模块 | 必需 | Python标准库,无需安装 |
| json | Python模块 | 必需 | Python标准库,无需安装 |
本技能基于原始开源作品改进,保留原始版权声明:
本改进作品在原始作品基础上进行了深度差异化改造,包括但不限于:
原始MIT license允许使用、复制、修改和分发,需保留版权声明。本改进作品在保留原始版权声明的基础上添加自有署名,完全符合MIT license要求。
本免费体验版限制以下高级功能:
batch-convert 子命令stream-convert 子命令与断点续传schema-check 子命令field-mapping 配置incremental-sync 子命令PostgreSQL/MySQL/SQLite)—— 专业版提供 db-sink 模块解锁全部功能请使用专业版:csv-json-converter-pro
### 30秒上手:单文件转换(补充)
# ...
直接对Agent说:
# ...
> "帮我把 data.csv 转成 JSON,第一行是表头。"
# ...
Agent会按本工具的模板规则输出可执行的Python脚本:
# ...
```python
import csv, json, chardet
| 错误场景 | 原因 | 处理方式 |
|---|---|---|
| 配置错误 | 参数缺失或格式错误 | 检查依赖说明中的配置要求 |
| 运行时错误 | 运行环境不满足 | 确认运行环境符合依赖说明 |
| 网络错误 | 连接超时或不可达 | 执行ping命令测试网络连通性,检查防火墙和代理设置连接后执行ping命令测试网络连通性,检查防火墙和代理设置连接后重新执行命令,参考国内替代方案 |