Nativescript无法读取JSON文件

时间:2019-12-16 16:30:14

标签: json nativescript angular2-nativescript angular-nativescript

我有以下json:

... / src / app / assets / i18n / en.json

{
  "TEST": "This is a some test data in a json file"
}

我有以下代码:

const folderName = "assets/i18n/en.json";
knownFolders.currentApp().getFile(folderName).readText().then(a => console.log("json file: "+ JSON.parse(a))));

它给我以下错误:

ERROR Error: Uncaught (in promise): SyntaxError: Unexpected end of JSON input
JS: SyntaxError: Unexpected end of JSON input
JS:     at JSON.parse (<anonymous>)

我尝试过:

  • folderName设置为“ /assets/i18n/en.json”
  • 重建并重新连接我的测试电话
  • 使用HTTP并与this.http.get("~/app/assets/i18n/en.json").toPromise().then(res => console.log("http???", res)).catch(err => console.log("err:", err));
  • 在不解析的情况下打印目标文件(它为空...)

但是错误仍然存​​在。

更新1 遗憾的是,该文件似乎不存在。 此代码:

const folderName = "assets/i18n";
const fileName = "en.json";

console.log("exists?", File.exists(folderName + "/" + fileName));

返回错误。

尽管可以看到项目文件中提供的图片。 enter image description here(提供的代码在AppComponent的构造函数中的app.component.ts中) 这可能是什么问题?

更新2 : 更新了我的webpack.config.js以复制.json文件:

new CopyWebpackPlugin([
                { from: { glob: "fonts/**" } },
                { from: { glob: "**/*.jpg" } },
                { from: { glob: "**/*.json" } },
                { from: { glob: "**/*.png" } },
            ], { ignore: [`${relative(appPath, appResourcesFullPath)}/**`] }),

但仍然没有运气。该文件仍然不存在...

Update3: 真是荒谬……该文件可以作为标准json文件导入,但Nativescript库仍然看不到。

import { File } from "tns-core-modules/file-system";
import config from "./assets/i18n/hu.json";
....

        const folderName = "./assets/i18n";
        const fileName = "hu.json";
        console.log("config:", config.test)
        console.log("exists?", File.exists(folderName + "/" + fileName));

这将产生以下输出:

JS: config: This is a translated line  
JS: exists? false

2 个答案:

答案 0 :(得分:1)

AFAIK,必须分割路径;您不能直接请求具有相对路径的文件。

const folderName = "assets/i18n";
const fileName = "en.json";

console.log(
 knownFolders.currentApp().getFolder(folderName).getFile(fileName).readTextSync(),
);

答案 1 :(得分:1)

在开发应用程序时,我面临类似的情况。问题是未授予文件权限。

无需任何许可即可完美运行的另一种方法是从URL中获取JSON并进行遍历。