5

我正在用头撞这个。

我找不到从 WinJS 应用程序中的子文件夹打开简单 json 文件的方法。

我试过 Ajax 和 WinJS.xhr,都无济于事。

我还研究过使用.NET中的File.Open之类的“老式”方式打开文件,但除了WinJS.Application.local.readText之外我找不到任何东西,我尝试了绝对和相对小路。

我已经走到尽头了,有人可以分享一个工作片段吗?

4

2 回答 2

10

您可以使用以下形式的 URL 引用应用程序包中的文件:

ms-appx:///data/data.json

(注意有三个/字符——如果你错过了第三个字符,你会遇到问题)

要读取和解析包含 JSON 对象的文件,您可以使用Windows.Storage命名空间中的对象。共有三个步骤 - 获取指向文件的 StorageFile 对象,读取文件的内容,然后解析 JSON 数据。这是我用来执行此操作的代码:

var url = new Windows.Foundation.Uri("ms-appx:///data/data.json");
Windows.Storage.StorageFile.getFileFromApplicationUriAsync(url).then(function (file) {
    Windows.Storage.FileIO.readTextAsync(file).then(function (text) {
        var parsedObject = JSON.parse(text);
        // do something with object
    });
});

从文件中读取数据的方法有很多,但我发现FileIO对象最方便。上面的代码假定文件中有一个 JSON 对象描述。如果您有一个每行包含一个对象的文件,那么您将需要这个:

var url = new Windows.Foundation.Uri("ms-appx:///data/data.json");
Windows.Storage.StorageFile.getFileFromApplicationUriAsync(url).then(function (file) {
    Windows.Storage.FileIO.readLinesAsync(file).then(function (lines) {
        lines.forEach(function (line) {
            var parsedObject = JSON.parse(line);
            // do something with object
        });
    });
});

这是一个细微的变化,它使用该FileIO.readLinesAsync方法创建一个字符串数组,每个字符串都被解析为一个 JSON 对象。

于 2012-09-20T12:55:23.517 回答
4

如果数据是您项目的一部分,并且您已将项目类型标记为内容,则

WinJS.xhr({ url: "data/mydata.txt" }).then(...)

为我工作。在此示例中假设 mydata.txt 位于项目中名为 data 的文件夹中

于 2012-09-20T12:09:40.937 回答