Dart json.decode 无法解码为 Map<String, String>

guy*_*guy 3 json dart

我的代码:

import 'dart:convert';

String jsonString = '''{
"a": "g",
"b": "h",
"c": "j",
"d": "k"
}''';

Map<String, String> map = json.decode(jsonString);
Run Code Online (Sandbox Code Playgroud)

得到错误:

Unhandled exception:
type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'Map<String, String>'
#0      main (file:///...)
#1      _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:298:32)
#2      _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:171:12)
Run Code Online (Sandbox Code Playgroud)

Map<String, dynamic> map ... 并且Map<String, Object> map ... 正在工作。

我试图最终Map<String, Map>为不同的 JSON 进行反序列化,它给了我同样的错误,所以我决定首先使用基本的,这是Map<String, String>为了更好地理解我做错了什么

Aji*_* O. 5

要确保将 JSON 转换为指定的值,请使用Map.castFrom方法。

所以你的代码变成

import 'dart:convert';

void main () {
  String jsonString = '''
{
  "a": "g",
  "b": "h",
  "c": "j",
  "d": "k"
}''';

  Map<String, String> map = Map.castFrom(json.decode(jsonString));
  print(map);
}
Run Code Online (Sandbox Code Playgroud)

请注意,如果类型不兼容,它将抛出。您应该始终考虑处理它。