Navicat导出JSON时无法直接重命名字段,必须通过自定义SQL查询使用AS别名(如SELECT id AS user_id)或创建带别名的视图来实现键名修改,且别名须为纯ASCII、无空格及特殊字符。
导出向导里根本没“重命名字段”选项?那是你没进对地方
navicat 导出 json 时,字段映射界面不提供直接编辑键名的输入框——它只允许你「选择」目标列,而 json 的 key 名默认来自表字段名。想改键名,必须绕过默认映射,用“自定义 sql 查询”作为数据源。
操作路径是:右键表 → 「查询」→ 写 SELECT id AS user_id, name AS full_name, created_at AS timestamp 这类别名语句 → 执行后点结果集右上角「导出向导」→ 格式选 JSON。这时导出的 JSON 字段名就是 user_id、full_name,不是原始列名。
- 别在普通表导出流程里找“重命名”,那个流程压根没这个功能
- 如果用视图替代,也得先建好带
AS别名的视图,再导出视图,不能临时改 -
AS别名里不能含空格或特殊字符,否则导出的 JSON key 会非法(如"full name"不被解析)
导出 JSON 后发现键名大小写不对?问题出在 MySQL 表定义和 Navicat 映射逻辑不一致
MySQL 默认不区分列名大小写,但 Navicat 导出 JSON 时,会严格按表结构里定义的大小写生成 key。比如表里字段是 UserID,导出就是 "UserID";如果是 userid,就是 "userid"。你没法在导出向导里强制转小写或驼峰。
- 最稳的办法是建表时统一用小写下划线风格(
user_id),避免后续适配麻烦 - 若已有大写字段又不想改表,只能走自定义查询:写
SELECT UserID AS user_id强制转换 - Navicat 不支持导出时批量替换 key 名,也没有正则重命名选项
JSON 键名含中文或 emoji?Navicat 会静默丢弃或截断
Navicat 导出 JSON 时,若字段名本身是中文(如 姓名)或含 emoji(如 ✅status),它不会报错,但生成的 JSON 文件中对应 key 可能为空、乱码,或整个字段被跳过。这不是 bug,是工具对 JSON 标准的保守实现——标准要求 key 必须是双引号包裹的字符串,但 Navicat 对非 ASCII 字符的编码处理不可靠。
- 导出前务必确认表字段名是纯 ASCII(a–z、0–9、_),这是唯一稳妥方案
- 如果业务强依赖中文字段名,必须用自定义查询 +
AS转成英文别名,例如SELECT 姓名 AS name - 不要指望“高级设置”里的编码选项能修复字段名乱码——那仅影响字段值的字符编码,不影响 key 名生成逻辑
为什么勾选了“每行一条记录”,但导出的 JSON 还是单大对象?
“每行一条记录”只控制 JSON 的**结构格式**(是否用数组包裹,还是每行一个独立对象),不改变 key 名。如果你看到的是 [{"id":1,"name":"a"},{"id":2,"name":"b"}],说明启用了该选项;如果是 {"data":[{"id":1},{"id":2}]},那就是你误用了“导出为 JSON with BLOB as Base64”或选错了导出格式。
- 必须确保导出格式选的是
JSON,而不是JSON with BLOB as Base64(后者会把二进制字段转 base64,且结构固定为外层包 data 字段) - “每行一条记录”启用后,输出是换行分隔的 JSON 对象(NDJSON),不是标准数组;若要数组格式,必须取消勾选,但此时所有数据会塞进一个大数组里,内存压力陡增
- key 名依然由字段名或
AS别名决定,跟这个选项无关
导出 JSON 时真正可控的键名来源只有两个:建表时定义的字段名、自定义查询中的 AS 别名。其他任何地方都不存在“重命名字段”的入口,也没法后期替换。











