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