json.decode 不转换 Map<String, Map<String,dynamic>>

json.decode doesnt convert Map<String, Map<String,dynamic>>

我有 json 这样的 resultMap

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

由此我需要转换 Map<String,Map<String,dynamic>>json.decode(json['resultMap']) 在 Map inside Map

上不起作用

如何转换?

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"] 将在您尝试读取它时抛出类型错误。所以不要那样做。