必须选“JSON”格式、取消勾选“导出表结构”、勾选“使用双引号包裹字段名”,否则导出文件非法;大表慎用“每行一条记录”,避免生成NDJSON;类型转换需后处理。
导出格式必须选“JSON”,不是“JSON with BLOB as Base64”
navicat 15+ 支持原生 json 导出,但下拉菜单里有两个相似选项:json 和 json with blob as base64。前者输出标准 json 数组(如 [{"id":1,"name":"张三"}]),后者会把二进制字段转成 base64 字符串并包裹在额外对象里,破坏结构。如果你要的是前端可直接 json.parse() 的数组,务必选 json —— 后者只适合需要保留图片/文件等 blob 字段的极少数场景。
必须取消勾选“导出表结构”,否则 JSON 里混入 SQL 语句
导出向导中,“导出表结构”默认可能被勾选。一旦启用,生成的文件开头会是 CREATE TABLE ... 或字段定义,后面才接数据,整个文件根本不是合法 JSON。解析时直接报 SyntaxError: Unexpected token C in JSON at position 0。操作上一定要:
- 勾选
导出数据 - 取消勾选
导出表结构
“使用双引号包裹字段名”不勾选,JSON 就不是 JSON
Navicat 导出 JSON 时,字段名默认不加引号(如 {id:1}),这违反 JSON 规范,所有标准解析器都会拒绝。必须进入 JSON 格式选项 弹窗,勾选 使用双引号包裹字段名。实测不勾选会导致:
- Python
json.loads()报Expecting property name enclosed in double quotes - JavaScript
JSON.parse()抛Unexpected token i in JSON at position 1 - 微信小程序云开发导入失败,提示“格式错误”
大表导出慎用“每行一条记录”,否则无法流式处理
导出 10 万行以上数据时,每行一条记录 看似清爽,实际生成的是换行分隔的 JSON 对象(如 {"id":1}\n{"id":2}),这不是 JSON 数组,而是 JSON Lines(NDJSON)。若你后续要用 fs.readFile + JSON.parse 一次性加载,会失败;必须用 readline 逐行解析。真要数组格式,就别勾这个选项——但要注意:不勾的话,整个结果会写成单行,文件体积暴涨,编辑器打不开,Git 也 diff 不了。权衡点在于:你要的是可解析性,还是可读性。
真正麻烦的不是设置本身,而是导出后才发现字段类型全变字符串、时间字段带 T、TINYINT(1) 导成 0/1 而非布尔值——这些 Navicat 不管,得靠后处理脚本修正。











