0

我有这样的 json,称为 resultMap

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

从这里我需要转换Map<String,Map<String,dynamic>>json.decode(json['resultMap'])不适用于 Map 内的 Map

我怎样才能转换这个?

4

1 回答 1

2

JSON 解析器不会尝试猜测地图元素的类型。所有 JSON 对象都被解析为 类型的映射Map<String,dynamic>。这允许您向地图添加任何值并将其转换回 JSON。您的地图仅包含其他地图作为值的事实可能只是一个愉快的巧合,并且使外部地图的类型Map<String, Map<String, dynamic>>会破坏期望读取这样的数据然后将其他类型的值添加到外部地图的代码,例如字符串.

所以,类型是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"]当您尝试读取它时会引发类型错误。所以不要那样做。

于 2020-02-10T15:28:36.867 回答