【问题标题】:json.decode doesnt convert Map<String, Map<String,dynamic>>json.decode 不转换 Map<String, Map<String,dynamic>>
【发布时间】:2023-03-27 12:26:01
【问题描述】:

我有这样的 json,叫做 resultMap

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

从这里我需要转换 Map&lt;String,Map&lt;String,dynamic&gt;&gt;json.decode(json['resultMap']) 在 Map inside Map 上不起作用

如何转换?

【问题讨论】:

  • 你应该使用Map&lt;string, dynamic&gt;而不是Map&lt;String,Map&lt;String,dynamic&gt;&gt;

标签: flutter dart dart-sdk


【解决方案1】:

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

所以,类型是Map&lt;String, dynamic&gt; 如果你知道它只包含地图,并且你不打算改变它,那么你可以这样做:

Map<String, dynamic> map = jsonDecode(...);
var mapmap = map.cast<String, Map<String, dynamic>>();
print(mapmap["key"]["otherKey"]);

这包装了原始地图,以便在您查找它们时将值转换为Map&lt;String, dynamic&gt;,因此您不必自己做。

如果您随后将非映射内容放入原始映射中,例如map["gotcha"] = "string";,那么mapmap["gotcha"] 将在您尝试读取它时引发类型错误。所以不要那样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-10
    • 1970-01-01
    • 2022-11-12
    • 2021-02-11
    • 2021-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多