DartのYamlをMap<String, String>やList<String>に変換する方法

2021/06/14に公開

環境

以下のライブラリを使う。(普通これだよね)

https://pub.dev/packages/yaml

Mapの場合

ライブラリでMapをパースするとMap型ではなくdynamic型が返ってくる。
実態はYamlMap型。
YamlMap型から値を取り出しても値の方が推論されず、使いにくい。

Yamlの構造が複雑な時は仕方ないが、Map<String, String>で十分な時は、Map型に変換したい。
.mapで変換できる。

import 'package:yaml/yaml.dart';

final yamlData = loadYaml("""
abc: abc
"""
) as YamlMap;

/// (key, value)を引数にとる。MapEntryを返す。
final map = yamlData.map((key, value) => MapEntry<String, String>(key, value));

Listの場合

ライブラリでListをパースするとList型ではなくdynamic型が返ってくる。
実態はYamlList型。

以下のコードでList<String>に変換できる

import 'package:yaml/yaml.dart';

final result = loadYaml("""
  - a
  - b
""") as YamlList;

final list = result.toList().cast<String>();

ググっても出でこなかった

Discussion