无法弄清楚如何在Dart中加载yaml文档

时间:2017-02-10 15:11:10

标签: dart yaml

根据Dart-Yaml酒吧套餐的readme,我应该能够做到以下几点:

var db = loadYamlDocument("db.yaml");

print(db['hostname']);给了我在yaml中为端口指定的值,但是我被告知YamlDocument没有实例方法[]。好吧,我猜这个对象没有地图行为,这是我原本期望的。通过文档查看,提到了YamlMap,但我根本没有看到如何实现它。

如果我只是尝试print(db);,我实际上会收到字符串:'db.yaml'

所以我尝试使用new File('db.yaml');然后将该变量发送到loadYamlDocument方法,但这也不起作用。

有没有人有幸在阅读yaml文档并在Dart中获取地图?

2 个答案:

答案 0 :(得分:3)

检查documentation pages for the Yaml package

loadYamlDocument()会返回YamlDocument,这是一个重量级的'使您可以访问Yaml文档的所有功能的类。

您可能希望使用loadYaml,在大多数情况下会返回Map。描述说地图的实际实现是YamlMap(Yaml包的Map实现,他们可能需要使用而不是HashMap来实现技术原因)。

答案 1 :(得分:3)

import "dart:io";
import "package:yaml/yaml.dart";

main() {
  File file = new File('pubspec.yaml');
  String yamlString = file.readAsStringSync();
  Map yaml = loadYaml(yamlString);
}

修改

Map loadYamlFileSync(String path) {
  File file = new File(path);
  if (file?.existsSync() == true) {
    return loadYaml(file.readAsStringSync());
  }
  return null;
}

Future<Map> loadYamlFile(String path) async{
  File file = new File(path);
  if ((await file?.exists()) == true) {
    String content = await file.readAsString();
    return loadYaml(content);
  }
  return null;
}

main(List<String> args){
  print(loadYamlFileSync("pubspec.yaml"));
}