Парсер JSON не пытается угадать тип элементов карты. Все JSON объекты разбиты на карты типа Map<String,dynamic>
. Это позволяет вам добавить любое значение на карту и преобразовать его обратно в JSON. Тот факт, что ваша карта содержит только другие карты в качестве значений, может быть просто счастливым совпадением, и сделать тип внешней карты Map<String, Map<String, dynamic>>
нарушит код, который ожидает чтения данных, подобных этому, а затем добавит другие виды значений на внешнюю карту. Как строки *
Map<String, dynamic> map = jsonDecode(...);
var mapmap = map.cast<String, Map<String, dynamic>>();
print(mapmap["key"]["otherKey"]);
Это оборачивает исходную карту, так что значения будут преобразованы в Map<String, dynamic>
при их поиске, поэтому вам не придется делать это самостоятельно.
Если вы поместите что-то, не относящееся к карте, в исходную карту, например map["gotcha"] = "string";
, то mapmap["gotcha"]
выдаст ошибку типа при попытке прочитать ее. Так что не делай этого.