You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

导入JSON数据后调用map()报TypeError,如何正确处理?

问题场景与解决方法

data.json 示例数据

[
  {"id": 23, "name": "Good!", "state": "OK"},
  {"id": 24, "name": "Not good...", "state": "Fail"},
  {"id": 26, "name": "Oh...", "state": "OK"},
  {"id": 27, "name": "What?", "state": "Fail"}
]

处理数据的脚本

import * as data from './data.json'

let jsonData = data
console.log(jsonData)

jsonData = jsonData.map(({name, state}) => ({name, state}))
console.log(jsonData)

执行报错输出

{default: Array(4)}
default
:
(4) [{...}, {...}, {...}, {...}]
0
:
(3) {id: 23, name: "Good!", state: "OK"}
1
:
(3) {id: 24, name: "Not good...", state:...}
2
:
(3) {id: 26, name: "Oh...", state: "OK"}
3
:
(3) {id: 27, name: "What?", state: "Fail...}
TypeError: jsonData.map is not a function
    at <anonymous>:35:21
    at dn (<anonymous>:16:5449)

问题

首次console.log输出的内容看似可迭代,但为何会抛出TypeError?曾尝试使用let jsonData = JSON.parse(JSON.stringify(data))等方法但均无效,请问如何解析文件中的数据以使其能正常使用map()方法?


原因解析

使用import * as data导入JSON文件时,得到的并不是直接的数组,而是一个模块对象。这个对象的default属性才指向JSON文件里的数组。直接对模块对象调用map方法自然会报错,因为普通对象没有map方法。

至于JSON.parse(JSON.stringify(data))无效的原因:这个操作只是把模块对象转成字符串再解析成新对象,得到的依然是包含default属性的对象,不是数组,所以还是无法调用map。

解决方法

有两种简单的方式可以解决:

方式一:直接导入默认导出的数组

修改导入语句,直接获取JSON文件的默认导出:

import data from './data.json'

let jsonData = data
jsonData = jsonData.map(({name, state}) => ({name, state}))
console.log(jsonData)

方式二:从模块对象中取出default属性

如果必须保留import * as data的写法,直接访问模块对象的default属性拿到数组:

import * as data from './data.json'

let jsonData = data.default
jsonData = jsonData.map(({name, state}) => ({name, state}))
console.log(jsonData)

内容的提问来源于stack exchange,提问作者AbreQueVoy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 00:10:35