我从Pub了解Yaml库,它可以通过loadYaml()函数加载和解析Yaml字符串。但我不知道,如何加载Yaml文件的内容作为这个函数的参数。
我的代码(不起作用):
数据.yaml
name1: thing1
name2: thing2
流程。dart
import 'dart:html';
import 'package:yaml/yaml.dart';
main(){
String path = 'data.yaml';
return HttpRequest.getString(path)
.then((String yamlString){
YamlMap map = loadYaml(yamlString);
String name = map['name1'];
print(name);
});
}
查看yaml.dart
中loadYaml
的来源。如果您使用eclipse或DartEditor,您也可以将鼠标悬停在loadYaml
上以获取描述。这里说,如果函数返回一个映射,那么它就是YamlMap
,而不是普通的Dart映射。它还可以返回其他内容,例如String
、num
、List
。你为什么不做print(map)
或print(map.runtimeType)
呢?
我想,为了做到滴水不漏,下面的代码需要做更多的工作,但这是为了我的基本目的,我从JSON过渡到了YAML,并希望保持我的代码库的其余部分几乎不变。
import 'package:yaml/yaml.dart';
extension YamlMapConverter on YamlMap {
dynamic _convertNode(dynamic v) {
if (v is YamlMap) {
return (v as YamlMap).toMap();
}
else if (v is YamlList) {
var list = <dynamic>[];
v.forEach((e) { list.add(_convertNode(e)); });
return list;
}
else {
return v;
}
}
Map<String, dynamic> toMap() {
var map = <String, dynamic>{};
this.nodes.forEach((k, v) {
map[(k as YamlScalar).value.toString()] = _convertNode(v.value);
});
return map;
}
}
...
var yamlData = loadYaml(yaml);
Map<String, dynamic> dartMap = yamlMap.toMap();
...
为了做到滴水不漏,它需要更好地处理异常,还需要处理像YAML标记这样的项目。我不需要这些,所以我没有进一步开发。
基于Dart YAML版本^3.1.0 的代码