JSON / CSV / YAML / SQL / XML 转换器
在浏览器中本地转换和校验开发中常用的数据。
SQL 输入支持 INSERT INTO ... VALUES 语句(MySQL、PostgreSQL、SQL Server 和 SQLite 风格);SELECT 结果请以 CSV 形式粘贴。CSV 的值按文本读取。XML 属性保存在 "@attributes" 下,与属性或子元素并列的元素文本保存在 "#text" 下。所有处理都在您的浏览器中完成。
使用方法
- 将数据粘贴到“输入数据”框中。将“输入”菜单保持为“自动检测”;如果知道数据格式,也可以选择 JSON、YAML、CSV、SQL 或 XML。
- 点击“转换为”旁边的某个格式。结果会显示在“输出”中,输入框上方的消息会确认转换完成,并列出需要检查的内容,例如可能已丢失精度的大数字、被重命名的键或被忽略的 SQL 语句。如果无法读取输入,消息会显示错误,“输出”也会被清空。
- 根据需要调整该格式显示的选项,例如 CSV 的“分隔符”和“嵌套数据”,SQL 的“SQL 数据库”“语句”和“表”,或 XML 的“根”和“项”。每次更改都会重新转换当前输入,因此无需再次点击格式按钮。
- 如果只想检查输入而不进行转换,请点击“校验语法”。它会报告语法正确,或者指出问题所在;如果解析器提供了行号和列号,也会一并显示。
- 检查“输出”,然后点击“复制结果”。“清空”会清空两个框。
常见问题
我粘贴的数据会被发送到其他地方吗?
不会。数据通过 JavaScript 在您的浏览器中解析和转换,本工具不会将其上传到 LeedyBox,也不会保存。页面打开时会直接从 leedybox.com 加载两个开源库:用于 YAML 的 js-yaml 和用于 CSV 的 PapaParse;它们在页面内运行,您的数据不会发送到任何地方。
“自动检测”如何判断格式?什么时候应该自己选择格式?
以 { 或 [ 开头的输入按 JSON 读取,以 < 开头的按 XML 读取;以 INSERT、CREATE、SET、START、UPDATE 或 WITH 等 SQL 关键字加空格开头,或以 --、/* 注释开头的输入按 SQL 读取。其他输入如果第一行包含逗号、制表符或分号,会先尝试按 CSV 读取,不行再按 YAML 读取。以下情况请在“输入”菜单中自行选择格式:CSV 或 YAML 以同时也是 SQL 关键字的单词开头时,例如以 Start date 或 Update time 开头的 CSV 标题行,因为它会被当作 SQL 读取而失败;YAML 输入的每一行逗号数量都相同时,例如 title: Hello, world 后接 tags: news, tech,因为它可能被当作 CSV 读取;处理以竖线分隔或只有一列的 CSV 时,因为自动检测无法识别这类格式;以及 YAML 或 CSV 输入读取失败时,因为自动检测只会报告无法识别格式,而手动选择格式时会显示解析器自身的错误信息,并且大多数情况下会指出出错的位置。
是否接受带注释、末尾逗号或每行一个对象的 JSON?
将“输入”菜单设为 JSON 时,只接受有效的 JSON,因此可以用此设置配合“校验语法”来检查文本是否为有效的 JSON。使用“自动检测”时,以 { 或 [ 开头但不是有效 JSON 的输入会尽可能按 YAML 流语法读取,并显示相应提示:这时末尾逗号、单引号和不带引号的键都可以使用,但不带引号的键在冒号后需要加一个空格,因为 {a:1} 会被读取为名为 a:1、值为 null 的键。// 和 /* */ 在 YAML 中不是注释,它们可能会混入键或值中,或导致输入无法读取,因此请先删除。JSON Lines(NDJSON)可作为输出格式,但超过一行时无法作为输入读取;请将各行放在 [ 和 ] 之间,并在除最后一行外的每行末尾加逗号。
从 YAML 转换时,为什么 1.10 变成了 1.1,01234 变成了 1234?
YAML 中不带引号、看起来像数字的值会被读取为数字,因此 1.10 这样的版本号会变成 1.1,01234 这样的邮政编码会变成 1234,0x1F 会变成 31;要将这些值保留为文本,请在 YAML 中给它们加上引号。本转换器使用 js-yaml 的核心模式(core schema)读取 YAML,该模式在布尔值和日期方面遵循 YAML 1.2,因此 yes、no、on、off 以及 2026-10-02 这样的日期都会保持为文本,只有 true 和 false 的各种写法(如 True 或 FALSE)才会变成布尔值。将 JSON 转换为 YAML 时,可能被误读的字符串(如 "01234"、"1.10" 或 "yes")会加上引号写出。
为什么同一个 XML 元素在一个文件中是对象,在另一个文件中却是数组?
在同一父元素下重复出现的子元素会变成数组,而只出现一次的子元素会变成普通值或对象,因此只含一个 <item> 的 <items> 与含两个 <item> 的 <items> 会得到不同的结构。所有 XML 值都按文本读取,因此 <id>1</id> 会变成 "1",007 会保留前导零;注释和处理指令则会被丢弃。输出 CSV 和 SQL 时,行取自 <items> 这类只有一个键的外层包装中的数组,因此如果只有一个 <item>,整个元素会作为 JSON 文本放进同一列;对于 CSV,可以用“展开(a.b.c 列)”将其拆分成多列。
可以将 MySQL 或 PostgreSQL 的转储内容作为 SQL 输入粘贴吗?
可以,只要数据行写在 INSERT INTO ... VALUES 语句中即可。CREATE TABLE、SET、LOCK 等设置类语句会被跳过,DROP TABLE 等其他语句会被忽略并给出提示,多个表的行会合并成一个列表,因此如果各表的列不同,请一次粘贴一个表。mysqldump 默认不写列名,因此除非使用 --complete-insert 导出,否则列会被命名为 column1、column2 等。pg_dump 默认以 COPY 块写出数据行,本工具无法读取,因此请改用 --column-inserts 导出。如果导出文件中还包含函数或存储过程,请只粘贴 INSERT 语句:本工具会在分号处拆分输入,因此函数体中的 INSERT 可能会被当作数据读取,或导致转换中止。
为什么 CSV 文件中的数字输出时带有引号?“CREATE TABLE + INSERT”使用哪些列类型?
CSV 中的所有值都被视为文本,这样可以保留 01234 这样的前导零,但 42 在 JSON 中会变成 "42",在 SQL 中会变成 '42';空单元格会变成空字符串,而不是 null 或 NULL。每一列的类型根据该列中的值来确定,因此由 CSV 生成的表会得到文本列:VARCHAR(255),或在值超过 255 个字符时使用 TEXT(SQL Server 为 NVARCHAR(255) 或 NVARCHAR(MAX),SQLite 为 TEXT)。如果输入是 JSON 或 YAML,并且某一列的值全都是不带引号的数字,或全都是 true 或 false,该列就会改用数字或布尔类型:整数类型(INT、INTEGER 或 BIGINT,取决于数据库和数字的大小)、用于小数的浮点类型,或 BOOLEAN(SQL Server 为 BIT,SQLite 为 INTEGER)。生成的语句不含主键、索引或 NOT NULL 约束,如果您的表需要,请在运行前自行添加。