Flutter Dart 将带有动态键但结构化值的 json 反序列化为 Map

2023-12-04

是否可以将具有动态键但结构化值的 json 反序列化为 flutter dart 中的 Map。

我有一个像这样的 json

{
   "data" : {
            "apple":{"qty":5, "price":100},
            "orange":{"qty":2, "price":40},
           }
}

我希望将其反序列化扑动/飞镖到下面的模型类

class Data {
    Map<String, Item> itemMap;

    factory Data.fromJson(Map<String,dynamic> json) {
        itemMap : json["data"]; //How to parse.
    }
}

class Item {
   int qty;
   int price;
}

我读过一篇媒体博客即使这也没有覆盖地图部分。


你需要做这样的事情:

//...
Future<List<ItemModel>> fetchFood() async {

    List<ItemModel> foodItemsList = [];

    // Get json response and parse it as a Map<String, dynamic>
    final response = {
       "data" : {
            "apple":{"qty":5, "price":100},
            "orange":{"qty":2, "price":40},
           }
       };
    // with your real get request use this:
    // final parsedJson = json.decode(response.body)['data'];

    // Parsed Json have what's inside data, in case of real request look for the line above this.
    final parsedJson = response['data'];

    // Iterate over all fruits and create Item object from each,
    // then push to a list of Item's objects to return it.
    parsedJson.forEach((k,v) => foodItemsList.add(ItemModel.fromJson(v)));

    return foodItemsList;
}

// Item model
class ItemModel {
   int qty;
   int price;

   ItemModel.fromJson(Map<String,dynamic> parsedJson)
      : qty = parsedJson['qty'],
        price = parsedJson['price'];

}

// Then call it
main() async {

  List<ItemModel> foodItemsList = await fetchFood();
  //..
}

如果您需要水果名称作为对象的一部分:

//...
Future<List<ItemModel>> fetchFood() async {

    List<ItemModel> foodItemsList = [];

    // Get json response and parse it as a Map<String, dynamic>
    final response = {
       "data" : {
            "apple":{"qty":5, "price":100},
            "orange":{"qty":2, "price":40},
           }
       };
    // with your real get request use this:
    // final parsedJson = json.decode(response.body)['data'];

    // Parsed Json have what's inside data, in case of real request look for the line above this.
    final parsedJson = response['data'];

    // Iterate over all fruits and create Item object from each,
    // then push to a list of Item's objects to return it.
    parsedJson.forEach((fruitName, fruitDetails) 
        => foodItemsList.add(
             ItemModel.fromJson(fruitName, fruitDetails)
        )
    );

    return foodItemsList;
}

// Item model
class ItemModel {
   String name;
   int qty;
   int price;

   ItemModel.fromJson(String fruitName, Map<String,dynamic> parsedJson)
      : name = fruitName,
        qty = parsedJson['qty'],
        price = parsedJson['price'];

}

// Then call it
main() async {

  List<ItemModel> foodItemsList = await fetchFood();
  print(foodItemsList[1].name); //orange
  //..
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flutter Dart 将带有动态键但结构化值的 json 反序列化为 Map 的相关文章

随机推荐

  • 使用正则表达式拆分算术表达式

    我想拆分一个表达式 例如 1 0 8 5 5 into 1 0 8 5 5 1 0 8 5 5 这就是我现在得到的expression split g 对此有何建议 这是一个解决方案 它正确检测到 并接受空格的使用 b s b s var
  • Mysqli 回滚不起作用

    我有一个 MySQL 数据库并且正在使用mysqli 由于某种原因 我无法让交易正常进行 如果我打电话 mysqli gt rollback 它不会回滚 示例代码 mysqli gt autocommit false sql INSERT
  • Android BroadcastReceiver 安装后不工作

    问候 我正在开发一个应用程序 它有一个 BroadcastReceiver 监听 android intent action PHONE STATE 该应用程序在手机状态更改时运行 我用它在检测到来电时运行代码 这在我的大多数测试手机上运行
  • 如何在MySQL中复制一行并插入到具有自动增量字段的同一个表中?

    在 MySQL 中 我试图复制一行自动递增 column ID 1 and insert将数据作为新行放入同一个表中column ID 2 我如何在单个查询中执行此操作 Use INSERT SELECT insert into your
  • 将 EDX:EAX 中存储的 64 位数字打印到标准输出

    我有一个大的 64 位数字存储在 EDX EAX 中 分别为 21C3677C 82B40000 我正在尝试将数字以十进制形式打印到控制台 2432902008176640000 是否有系统调用可以让我完成此操作 必须有人怜悯这个人和他的同
  • 如何解决kongfirst reqtest延迟问题,如何限制某些路由的访问,如何做instrumentaion

    我有一个微服务结构 其中包含一些基于 python Django 的服务 结构如下 用户kong阿尔法kong 测试版 kong 伽玛 这是我的kong yml声明式配置 format version 2 1 transform true
  • 将按钮放置在 gridview 中的最后一列

    我有一个网格视图 我通过代码向其中添加列 Retrieve Table from database gridOffers DataSource table gridOffers DataBind The columns added by c
  • 使用 R 选择列中组内的前 N ​​个值

    我需要从 R 中的以下数据框中为每个组 年月 值选择前两个值 我已经按计数和年月对数据进行排序 如何在以下数据中实现这一目标 yearmonth name count 1 201310 Dovas 5 2 201310 Indulgd 2
  • JSF 使用 maxInactiveInterval 的问题

    各位 我发现在 web xml 中测试值为 1 分钟到期时 以下代码会在页面呈现时立即重定向到给定的 url 任何指示将不胜感激 The pageContext 仅当您在 JSP 上使用 JSF 时才可用 当您尝试重定向到 XHTML 文件
  • PdfStamper正在处理输出流吗? (iTextSharp)

    我正在使用 iTextSharp 通过 C 将页码添加到 PDF 在运行代码分析时MemoryStream因为怀疑输出被多次处理 请参阅 Visual Studio 生成的此警告 这是 API 问题吗 如果第二个参数为PdfStamper被
  • 使用 AES256 编译 System.Data.Sqlite

    我正在深入研究 sqlite system data sqlite 和 xerial 的 JDBC 的编译 试图让加密的 sqlite 文件在这三个文件中工作 据我了解 系统数据 sqlite使用RC4加密 SQLCipher Rijnda
  • Rmarkdown - 重复的目录(目录)

    你好 StackOverflow 社区 创建 Rmarkdown 文档时一切顺利 目录按预期显示 目录正确 当我在浏览器中从 Rstudio 打开 HTML 到我的浏览器时 它也能正确显示 当我保存 HTML 并稍后打开它或将其发送给某人时
  • Java记录方法调用?

    是否有任何工具可用于记录正在运行的 java 应用程序的所有方法调用 eg String str String anotherString str trim 应该记录如下内容 method call trim from class java
  • PostgreSQL,通过查询删除表

    我有这样的查询来列出当前数据库中的表 SELECT c relname FROM pg catalog pg class c LEFT JOIN pg catalog pg namespace n ON n oid c relnamespa
  • 有关如何使用正则表达式验证姓名的建议

    我想验证name and surname对于我的 Ruby on Rails 3 应用程序 所以我发布了这个问题 有人建议我阅读程序员对名字的误解文章 现在我遇到了麻烦 验证姓名的正确方法是什么 正则表达式是一种方法 但是我应该注意什么 你
  • offsetHeight 和 clientHeight 之间的区别

    在 javascript dom 中 元素的 offsetHeight 和 clientHeight 有什么区别 客户高度 返回对象可见区域的高度 以像素为单位 该值包含带有内边距的高度 但不包括滚动条 边框和边距 偏移高度 返回对象可见区
  • 当表为空时 DataBodyRange 会导致错误

    晚上好 我有以下按钮来保存表单的寄存器信息 但是在启动第一个记录时 它会抛出错误 错误已发生 91 对象或块变量未建立 并指示突出显示的内容 当已经插入值时它可以正常工作后 问题仅针对第一条记录 请问您能帮我解决这个错误吗 非常感谢 Pri
  • 如何从远程服务器收集 HTML 源响应?

    在我的一个服务器页面的 HTML 代码中 我需要对数据库中的特定项目进行搜索 该数据库位于我自己不拥有的另一台远程服务器中 执行我的请求的搜索类型示例 http www remoteserver com items search php s
  • 找到距离给定点最近的点的最快方法是什么?

    在数据数组中找到距离给定点最近的点的最快方法是什么 例如 假设我有一个数组A3D 点 与往常一样 坐标为 x y 和 z 和点 x p y p z p 我如何找到最近的点A到 x p y p z p 据我所知 最慢的方法是使用线性搜索 还有
  • Flutter Dart 将带有动态键但结构化值的 json 反序列化为 Map

    是否可以将具有动态键但结构化值的 json 反序列化为 flutter dart 中的 Map 我有一个像这样的 json data apple qty 5 price 100 orange qty 2 price 40 我希望将其反序列化