Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
颤振-读取JSON文件时没有此类文件或目录的错误_Json_Dart_Flutter - Fatal编程技术网

颤振-读取JSON文件时没有此类文件或目录的错误

颤振-读取JSON文件时没有此类文件或目录的错误,json,dart,flutter,Json,Dart,Flutter,您好,我正在尝试将JSON转换为对象,但当我读取文件时,它引发了一个异常: FileSystemException:无法打开文件,路径='D:/AndroidStudio/my_app/assets/data/questions.json'(操作系统错误:没有这样的文件或目录,errno=2) 代码如下: String loadQuestionAsset() { String jsonString; new File('D:/AndroidStudio/my_app/assets/dat

您好,我正在尝试将JSON转换为对象,但当我读取文件时,它引发了一个异常:

FileSystemException:无法打开文件,路径='D:/AndroidStudio/my_app/assets/data/questions.json'(操作系统错误:没有这样的文件或目录,errno=2)

代码如下:

String loadQuestionAsset() {
  String jsonString;
  new File('D:/AndroidStudio/my_app/assets/data/questions.json').readAsString().then((String contents) {
    jsonString = contents;
  });
  return jsonString;
}
List<Question> parseJsonForQuestion() {
  Map decoded = jsonDecode(loadQuestionAsset());
  List<Question> questions = new List<Question>();
  for (var question in decoded['questions']) {
    questions.add(new Question(question['question'], question['bool']));
  }
  return questions;
}

感谢您的帮助:)

您需要提供的路径是:
assets/data/questions.json

现在,为了读取它,您还必须将其添加到
pubspec.yaml
文件中的资产中

flutter:
  assets:
    - data/questions.json
然后,为了阅读,您应该使用:

我希望它能起作用:)

您可以:

String loadQuestionAsset() {
  String jsonString;
  File('D:/AndroidStudio/my_app/assets/data/questions.json').create().readAsString().then(String contents) {
    jsonString = contents;
  });
  return jsonString;
}

非常感谢你的帮助,但我就是不能让它工作。我按照你说的做了,但现在它返回Future而不是Future,因为它是一个异步函数。您确定没有删除
wait
关键字吗?无论如何,我建议您阅读Dart中异步函数的工作原理:。它可能会解决您的问题;)
Map map = await rootBundle
  .loadStructuredData('assets/data/questions.json', (String s) async {
     return json.decode(s);
  });
String loadQuestionAsset() {
  String jsonString;
  File('D:/AndroidStudio/my_app/assets/data/questions.json').create().readAsString().then(String contents) {
    jsonString = contents;
  });
  return jsonString;
}