DART lang读取保存在客户端中的JSON文件,即不使用服务器

时间:2014-09-03 19:58:15

标签: json dart

我正在尝试使用强制代码从JSON文件中读取数据:

void makeRequest(Event e){  
     var path='json/config.json';
     var httpRequest= new HttpRequest();
     httpRequest
       ..open('GET', path)
       ..onLoadEnd.listen((e)=>requestComplete(httpRequest))
       ..send('');
}

当应用程序以http:// ... / index.html运行时,这非常有效,但在尝试将其打开为file:///.../index.html

Exception: NetworkError: Failed to load 'file:///D:/DartApp/web/json/config.json'. main.dart:53makeRequest main.dart:53<anonymous closure>

除了httpRequest之外还有其他方法可以从客户端读取JSON文件!

我知道我有3个选项,其中2个只能使用HttPRequest,它们是:

  1. 保存服务器的文件,并从服务器读取=&gt;可以使用HttpRequesit
  2. 将文件保存在服务器上,并从客户端读取=&gt;可以使用HttpRequesit
  3. 将文件保存在客户端上,并从客户端本身读取=&gt;不能使用HTTPRequest
  4. 我正在寻找第三种选择的方法,就像使用webview制作离线Android应用程序,或者制作离线Chrome打包应用程序,即我根本不想使用服务器。感谢

    感谢

2 个答案:

答案 0 :(得分:7)

如果您需要的只是json文件中的数据,您只需将这些数据包含在.dart文件中(例如,作为Map变量/常量)。

Map config = {
   "displayName": "My Display Name",
     "anotherProperty": 42,
     "complexProperty": {
         "value_1": "actual value",
         "value_2": "another value"
     }
   };

如果您需要实际的json,可以输入String。类似的东西:

const configJson = '''
   { "displayName": "My Display Name",
     "anotherProperty": 42,
     "complexProperty": {
         "value_1": "actual value",
         "value_2": "another value"
     }
   }
''';

json数据可以位于单独的.dart文件中,该文件可以作为同一个库的一部分(通过part of ...)或导入(import 'package:mypackage/json.dart';)包含在内。

如果您正在寻找可以更改并且更改仍然存在的内容,那么您将需要使用某种离线存储,如果您正在运行,则可以使用网络存储在浏览器中。您可以使用上述方法定义初始配置数据,将其存储在Web存储中,然后从那里读取并编辑它。

[编辑原始问题之前的上一个答案。]

对不起,请阅读&#34;客户端&#34;,思考&#34;服务器端&#34;。我的错误。

如果是&#34;客户端&#34;你的意思是&#34;在浏览器中运行&#34;,你试图访问服务器上的json文件,然后不,除了http请求之外没有任何其他方式。实际上,这是在服务器上读取任何文件的唯一方法,而不仅仅是json文件。 (好吧,我想你可以打开一个WebSocket并传输内容,但这似乎不是你正在寻找的解决方案。)

[下面的旧解决方案,在我的错误(服务器与客户端)之前指出。]

尝试:

// THIS DOESN'T WORK IN A BROWSER ENVIRONMENT (aka client side)
import 'dart:io';
import 'dart:convert';


// ...

new File('json/config.json')
    .readAsString()
    .then((fileContents) => JSON.decode(fileContents))
    .then((jsonData) {
        // do whatever you want with the data
    });

答案 1 :(得分:2)

这个糟糕的例子在chrome dev编辑器dart web app示例中运行良好。 使用 HttpRequest.getString 可以正常使用文件名和路径。

克里斯在json网络服务方面做得很好 https://www.dartlang.org/articles/json-web-service/

import 'dart:html';
import 'dart:convert';

void main() {
  HttpRequest.getString('json/config.json').then((myjson) {
    Map data = JSON.decode(myjson); 
    var version = data["version"];
    var element = new DivElement();
    element.text = "version = $version";
    document.body.children.add(element);
  });
}