json .decode не конвертирует карту > - PullRequest
0 голосов
/ 10 февраля 2020

У меня есть json как это называется resultMap

{
  "someInfo":{
    "moreInfo":"test",
    "moreInfo2":"test2"
  }
}

из этого мне нужно конвертировать Map<String,Map<String,dynamic>>, но json.decode(json['resultMap']) не работает на карте внутри карты

Как можно я конвертирую это?

1 Ответ

2 голосов
/ 10 февраля 2020

Парсер 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"] выдаст ошибку типа при попытке прочитать ее. Так что не делай этого.

...