将数组从 JSON 文件导入 Typescript 文件

Posted

技术标签:

【中文标题】将数组从 JSON 文件导入 Typescript 文件【英文标题】:Import Array from JSON File into Typescript File 【发布时间】:2020-06-24 06:52:09 【问题描述】:

我有一个 JSON 文件,其中包含一个数组对象:

[
  
    "VergiNo": "XXXXXXX"
  ,
  
    "VergiNo": "YYYYYY"
  ,
  
    "VergiNo": "ZZZZZZ"
  
]

然后我将此 JSON 文件导入到我的 Typescript 文件中

import * as firmalar from "../firmalar.json";

const firmaPromises = firmalar.map((firma) => firma.VergiNo + "XYZ");

以上代码没有给出语法错误,但是当我运行应用程序并对其进行调试时,firmalar 对象被视为对象而不是数组,因此它不处理映射方法。

我在这里做错了什么吗?

【问题讨论】:

firmalar.json 文件返回字符串只需用 JSON.parse(firmalar) 解析即可。 【参考方案1】:

我会尝试解析 JSON。那应该返回一个数组。

import * as firmalar from "../firmalar.json";

const firmalarArray = JSON.parse(firmalar);
const firmaPromises = firmalarArray.map((firma) => firma.VergiNo + "XYZ");

【讨论】:

这给出了一个语法错误,因为firmalar 未被识别为字符串。即使我使用:const firmalarArray: [ VergiNo: string ] = JSON.parse(firmalar.toString()); 它在运行时也不起作用。【参考方案2】:

您正在导入整个模块。

您可以只导入该常量:

import  yourArray  from "../firmalar.json";

或者从模块中提取数组:

const firmalarArray = JSON.parse(firmalar.yourArray);

【讨论】:

【参考方案3】:

我最终使用 require() 来获取 JSON 并将其转换为我的对象,如下所示:

// eslint-disable-next-line @typescript-eslint/no-var-requires
const firmalar = require("./firmalar.json");

// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
const firmalarArray:  VergiNo: string [] = firmalar;

现在它可以按预期工作了。 This post 帮我找到了解决方案。

【讨论】:

【参考方案4】:

要导入 JSON 数据,您应该使用:

import firmalar from "../firmalar.json";

这将在不更改的情况下导入它,并且您将获得一个数组。

当您使用 * as firmalar 进行导入时,它会尝试将 JSON 转换为模块,这是一种对象。检查它你会发现它有 Object 样式的访问器,所以firmalar[0] 可以工作,但firmalar.length 不行。

【讨论】:

这很好用!但是,您需要将 allowSyntheticDefaultImports 标志添加到您的 tsconfig.json 并将其设置为 true

以上是关于将数组从 JSON 文件导入 Typescript 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何将 package.json 导入 Typescript 文件而不将其包含在编译输出中?

Typescript:导入导入json文件的js库

Typescript IDE自动从dist而不是src导入

如何使用 VueJS / Typescript 导入 JSON 文件?

从模块导入“私有”TypeScript 声明而不通过 package.json 公开它

VSCode typescript导入json文件高亮问题