Navicat 17 仅支持扁平 JSON 数组(如[{"k":"v"}]),不解析外层包装或嵌套结构;需预处理提取data字段、扁平化嵌套、统一小写下划线命名、补全缺失字段,否则静默丢数据。
Navicat 17 导入 JSON 报“Invalid JSON format”但文件能被 json.loads() 解析?
不是 json 语法错,是 navicat 17 仍只认扁平的 [{"key":"val"},{"key":"val"}] 结构,不解析嵌套对象或外层包装字段。比如你导出的 api 数据长这样:{"status":"success","data":[{"id":1,"name":"a"}]},navicat 会卡在 { 开头就报错。
实操建议:
- 用 Python 提前提取内层数组:
import json with open('api.json') as f: data = json.load(f) with open('clean.json', 'w') as f: json.dump(data['data'], f) # 注意:确保 key 是 'data',不是 'items' 或其他 - 用
jq命令(macOS/Linux):jq '.data' api.json > clean.json - 别依赖在线工具自动“美化”——有些会加 BOM 或换行缩进,反而触发 Navicat 编码误判
字段映射里看不到嵌套字段(如 user.name)?
Navicat 17 不支持点号路径解析,{"user":{"name":"tom"}} 中的 user.name 不会被识别为独立字段,它只提取顶层 key:user(类型为 JSON),而不会展开。
实操建议:
- 导入前必须扁平化:把
{"user":{"name":"tom"}}改成{"user_name":"tom"} - Python 扁平化脚本示例(处理一层嵌套):
import json def flatten(obj): out = {} for k, v in obj.items(): if isinstance(v, dict): for subk, subv in v.items(): out[f"{k}_{subk}"] = subv else: out[k] = v return out <p>with open('raw.json') as f: data = json.load(f) flattened = [flatten(item) for item in data] with open('flat.json', 'w') as f: json.dump(flattened, f) - 如果嵌套超过两层(如
address.city.zipcode),Navicat 17 基本无解——改用 SQL 插入 +JSON_EXTRACT()后处理
导入后部分字段值为 NULL,但 JSON 里明明有数据?
常见于字段名大小写/空格不一致、或 Navicat 从第一个对象推导 schema 后,后续对象缺该字段。例如第一行有 "UserId",第二行写成 "userid",Navicat 会把第二行这个值丢弃而非映射到 user_id 列。
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
实操建议:
- 强制统一字段名:用正则全局替换
"UserId"→"user_id","Full Name"→"full_name" - 确保每条记录字段完整:哪怕值为空,也显式写
"age": null,别直接删掉整对 key-value - 导入向导中勾选
Ignore invalid rows(在「高级」设置里),避免单条脏数据中断全部导入
中文字段名或带空格的 key 导入失败?
Navicat 17 字段映射逻辑严格匹配字符串,"用户姓名" 和数据库列 user_name 完全无法关联;含空格的 "first name" 会被截断或忽略。
实操建议:
- 预处理 JSON,用脚本批量替换:
.replace(" ", "_").replace("(", "_").replace(")", "_") - 禁止使用中文字段名——这不是 Navicat 的 bug,是 MySQL 标识符规范限制(即使允许,也会导致后续 SQL 维护困难)
- 如果原始数据必须保留中文 key,导入时先选「忽略」该字段,导入完成后再用 UPDATE +
JSON_EXTRACT()补数据
嵌套层级越深、字段命名越随意,Navicat 17 的 JSON 导入就越容易静默丢数据——它不会报错,只是跳过。真正可靠的方案永远是:先用脚本把 JSON 转成和表结构 1:1 对齐的扁平数组,再导入。

















