导出json字段名没引号是因为未启用“使用双引号包裹字段名”选项;需在导出向导→json格式选项中手动勾选,否则生成{id:1}等非法json,导致解析失败。
导出json字段名没引号?检查“使用双引号包裹字段名”是否启用
mac版navicat导出的json被解析失败,最常见的原因是字段名没加双引号,比如生成{id:1,name:"张三"}而非标准{"id":1,"name":"张三"}。这不是bug,是导出设置漏勾了。
进入「导出向导」→「JSON格式选项」后,必须手动勾选使用双引号包裹字段名。这个选项默认不开启,且Mac界面里文字小、位置靠下,容易忽略。
未勾选时,Navicat会按JavaScript对象字面量风格输出——合法JS但非法JSON,JSON.parse()直接抛SyntaxError: Unexpected token。
- 确认路径不含中文或空格:导出目标文件夹名用英文,如
/Users/me/navicat_export/,否则可能静默失败 - 别点「导出表结构」:一旦勾选,输出开头混入
CREATE TABLE语句,整个文件不再是JSON - 老版本(
v15以下)根本无此选项:Mac版Navicat 12/14不支持JSON导出,升级到v15.0.28+才稳定可用
导出内容全是字符串?检查MySQL字段类型与Navicat导出逻辑
你看到{"created_at":"2024-03-15T09:22:33","status":"1"},但期望status是布尔值或数字——这不是转义问题,是Navicat对MySQL原生类型的处理策略。
Navicat导出JSON时,不会做类型推断:TINYINT(1)存布尔值,导出为"1"或"0"字符串;INT存Unix时间戳,也原样导出为数字字符串。它只忠实反射查询结果的文本表现。
真正影响输出的是MySQL连接层的字符集和字段定义:
- 执行
SET NAMES utf8mb4再导出,避免中文字段变成"???"导致JSON校验失败 -
DATETIME/TIMESTAMP字段固定输出ISO 8601字符串(如"2024-03-15T09:22:33"),不是毫秒时间戳,也不受「日期格式」设置影响 - 若字段含换行符
或制表符,Navicat默认不转义,会导致JSON语法错误;预处理时用REPLACE(col, ' ', '\n')清洗
导出JSON为空数组[]?重点排查Mac端选中行为与分页限制
Mac版Navicat在查询结果页右键导出,极易因「未全选」导致[]。它不像Windows版有明显「全选」按钮,依赖键盘操作,且状态栏提示不醒目。
执行SELECT * FROM users后,务必做两件事:
- 在结果表格区域按
Cmd+A全选(不是SQL编辑器窗口) - 右键选择
Export All Rows as JSON,而非Export Selected Rows as JSON——后者只导当前选中行,未选中即为空 - 看底部状态栏:显示
Showing 1 to 20 of 124 rows说明有124条,但只显示20条;若显示0 rows,检查WHERE条件是否写错(比如用了中文引号「」或大小写不匹配)
另外,Mac版缓存较顽固:改完SQL后没点「运行」图标(▶️)就直接导出,会沿用上一次结果。
导入JSON时报“Invalid JSON”却找不到具体哪行错?Mac端无BOM容错更差
Mac版Navicat对UTF-8 BOM头异常敏感。即使JSON内容完全合法,只要文件开头带EF BB BF字节,它就报Invalid JSON且不提示位置——这是macOS文本编辑器(如TextEdit)另存为UTF-8时的默认行为。
解决方法极简:
- 用VS Code打开JSON文件 → 右下角点击编码名(如
UTF-8)→ 选Save with Encoding→UTF-8(注意不是UTF-8 with BOM) - 终端快速验证:
head -c 3 your_file.json | xxd,输出含ef bb bf即带BOM,需清除 - Navicat导入只认
[{"id":1},{"id":2}]这种array of objects,单对象{"id":1}或嵌套结构{"data":[...]}一律失败,必须提前用脚本提取数组
Mac系统对文件路径权限更严格,导出路径若在/Volumes/MyDisk/这类挂载卷,有时因权限不足生成截断文件,表面成功实则JSON不完整——优先导出到~/Desktop/验证。











