navicat 16仅支持导入扁平json数组([{...},{...}]),不支持嵌套结构;需验证json合法性、确保无bom、根为数组、字段名大小写严格匹配,并在导入向导中正确设置分隔符和字段映射。

Navicat 16 能直接导入 JSON,但只支持扁平结构的数组格式(即 [{...}, {...}]),嵌套对象或深层数组会丢字段、截断或静默失败。
确认JSON文件结构是否合法且可导入
Navicat 不校验 JSON 语法,非法格式会导致中途卡死或“成功但无数据”。必须提前验证:
- 用 VS Code / Sublime / JSON.cn 打开文件,确认能正常高亮解析,无
Unexpected token类错误 - 首层必须是 JSON 数组(
[{...}, {...}]),不能是单个对象({...})或带外层包装(如{"data": [...]}) - 若原始 JSON 是嵌套结构(例如含
"profile": {"name": "A"}),需先用jq或 Python 提前展平:jq '.data[] | {id: .user.id, name: .user.profile.name, orders: .orders | join(",")}' input.json > flat.json - 避免 BOM 头:保存为 UTF-8 **without BOM**(记事本另存为时勾选“UTF-8”,不要选“UTF-8-BOM”)
导入向导中关键步骤的参数选择
右键目标表 → “导入向导” → 类型选 JSON 文件 后,以下几步极易出错:
详细的 Three.js 3D 图形参考,涵盖场景设置、相机、几何体、材质、光照、动画、控制器、加载器、数学工具和调试。
-
选择分隔符页面:务必选第一项空白选项(代表根数组),不是Root也不是字段名;选错会导致只导入一个字段(整个 JSON 字符串)或报Invalid path -
表行标签页面:同样选空(None),不选任何字段;否则 Navicat 会误把某个字段当主键索引,跳过其余数据 -
字段对应步骤:左侧 JSON 字段名与右侧表字段名**必须完全一致(大小写敏感)**;若不一致,手动拖拽匹配,别依赖自动映射——自动映射只按名称字符串匹配,不识别语义 -
字段类型列:对长文本字段(如含 HTML、日志、描述),别默认用VARCHAR(255);遇到截断报错时,手动改为LONGTEXT或TEXT
导入失败常见报错及对应处理
这些错误不会弹窗提示具体原因,而是显示“0 行插入”或中途停止:
-
Data too long for column 'xxx':字段长度不足 → 回到“字段对应”页,点该字段右侧的“类型”下拉框,改用TEXT或LONGTEXT -
Incorrect datetime value:JSON 中日期格式非"2023-10-05"或"2023-10-05 14:22:00"→ 用正则替换为标准格式,或在 Navicat 的“附加选项”里勾选Allow invalid date -
Field 'xxx' doesn't have a default value:表中某字段设了NOT NULL但 JSON 缺失该字段 → 在“字段对应”页,对该字段点击右侧“忽略”按钮,或提前用脚本补全缺失字段 - 导入后部分字段为
NULL:JSON 键名拼写错误(如"user_name"vs"username")或大小写不一致 → 重新检查字段映射,开启“区分大小写”再试
导入前必须做的三件事
跳过这三步,90% 的问题都源于此:
- 用
head -n 20 your.json或文本编辑器看前 20 行,确认是[{开头的数组,且每条记录字段数量一致 - 在 MySQL 中执行
SHOW CREATE TABLE your_table\G,抄下所有字段名和类型,逐个对照 JSON 键名 - 对超 1 万行的数据,先导 100 行测试:
jq 'limit(100; .)' input.json > test.json,验证流程无误后再全量跑
最易被忽略的是 JSON 根结构和字段名大小写——Navicat 不报错,只静默跳过不匹配字段,等你刷完表才发现数据少了一半。动手前花两分钟看一眼原始文件开头,比重跑三次导入更省时间。










