JavaScript中不能直接用new Map(jsonObj)转换普通对象,需先用Object.entries()等方法提取键值对;Object.entries()最简洁,但不支持Symbol键;含Symbol键时用Reflect.ownKeys();JSON字符串需先parse再转换。

JavaScript 中不能直接用 new Map(jsonObj) 把普通对象转成 Map,因为 Map 构造函数只接受可迭代对象(如数组),而普通对象不是可迭代的。需要先提取键值对,再传入 Map。
使用 Object.entries() 转换(推荐)
这是最简洁、兼容性好的方式,适用于键名为字符串的普通 JSON 对象:
-
Object.entries(obj)返回一个二维数组,如[["a", 1], ["b", 2]],正好符合 Map 构造函数的输入格式 - 支持嵌套对象,但只做一层转换(Map 的 value 仍是原对象,不会递归转内部对象为 Map)
示例:
const jsonObj = { name: "Alice", age: 30, city: "Beijing" };const map = new Map(Object.entries(jsonObj));
console.log(map.get("name")); // "Alice"
手动遍历 for...in 或 Object.keys()
适合需要过滤属性、处理 Symbol 键、或兼容老环境(IE)时使用:
将后端 Java 接口文档转换为前端 TypeScript 类型定义(interface / type)。输入:飞书文档、Spring Boot 接口文档、Swagger/OpenAPI、手写 API 文档等。输出:包含请求参数与响应结果的 .md 文件,含完整 JSDoc 注释。触发关键词:Java 转 TS、接口转换、生成前端类型、接口文档转 TypeScript、DTO/VO/BO 转 interface、后端文档转前端类型、生成接口类型、类型定义生成。
-
for...in会遍历原型链上的可枚举属性,建议加hasOwnProperty判断 -
Object.keys()只返回自身可枚举字符串键,更安全,但不包含 Symbol 键
示例(用 Object.keys):
const map = new Map();Object.keys(jsonObj).forEach(key => {
map.set(key, jsonObj[key]);
});
处理含 Symbol 键或混合键名的情况
如果原始对象有 Symbol 属性,Object.entries() 和 Object.keys() 都无法获取,需用 Reflect.ownKeys():
const jsonObj = { a: 1, [sym]: "symbol-value" };
const map = new Map(Reflect.ownKeys(jsonObj).map(key => [key, jsonObj[key]]));
注意:JSON 对象 ≠ JavaScript 对象
严格来说,“JSON 对象”是字符串(如 '{"a":1}')。若你拿到的是 JSON 字符串,要先 JSON.parse() 成 JS 对象,再转 Map:
const obj = JSON.parse(jsonString);
const map = new Map(Object.entries(obj));
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










