如何解析嵌套JSON字典并转换为Flutter Dart中的Map结构
在Flutter中解析嵌套Map类型的JSON(对应Swift字典结构)
你说的这种嵌套字典结构的JSON解析其实很简单,和你已经掌握的数组解析思路是通的,只是把处理List的逻辑换成处理Map就行。咱们一步步来:
1. 定义子数据模型类
首先,先给每个tag对应的helpHdr和helpText定义一个模型类,比如叫HelpContent:
class HelpContent { final String helpHdr; final String helpText; HelpContent({required this.helpHdr, required this.helpText}); // 从JSON解析成HelpContent实例的工厂构造函数 factory HelpContent.fromJson(Map<String, dynamic> json) { return HelpContent( helpHdr: json['helpHdr'] as String, helpText: json['helpText'] as String, ); } }
2. 定义主模型类
接下来定义包含整个tag字典的主类,比如叫TagDictModel,里面的tagDict是一个Map<String, HelpContent>类型:
class TagDictModel { final Map<String, HelpContent> tagDict; TagDictModel({required this.tagDict}); // 解析外层JSON的工厂构造函数 factory TagDictModel.fromJson(Map<String, dynamic> json) { // 取出tagDict对应的Map,然后遍历每个键值对,把值转换成HelpContent实例 final tagMap = json['tagDict'] as Map<String, dynamic>; Map<String, HelpContent> parsedTagDict = {}; tagMap.forEach((key, value) { parsedTagDict[key] = HelpContent.fromJson(value as Map<String, dynamic>); }); return TagDictModel(tagDict: parsedTagDict); } }
3. 解析JSON并取值
现在你就可以把你的JSON字符串或者从文件/网络获取的JSON数据解析成模型,然后像你想要的那样取值了:
// 示例JSON字符串 String jsonString = ''' { "tagDict" : { "abc" : { "helpHdr" : "short text1", "helpText" : "long text1" }, "def" : { "helpHdr" : "short text2", "helpText" : "long text2" } } } '''; // 解析JSON Map<String, dynamic> parsedJson = jsonDecode(jsonString); TagDictModel myVariable = TagDictModel.fromJson(parsedJson); // 取值,记得加?避免空指针 String? shortText1 = myVariable.tagDict["abc"]?.helpHdr; // 得到"short text1" String? longText2 = myVariable.tagDict["def"]?.helpText; // 得到"long text2"
这样就完全实现了你想要的效果,和Swift里的字典用法逻辑一致,只是Dart里需要通过模型类来访问属性~
内容的提问来源于stack exchange,提问作者w461
相关产品推荐
相关产品推荐

