【问题标题】:Iterate through map data within a nested sub-map遍历嵌套子地图中的地图数据
【发布时间】:2021-06-29 16:58:01
【问题描述】:

我们的应用从 Firebase 接收嵌套的 JSON 数据。我们将这些数据存储在 Object Item & Object Order 列表中。

Object Order可以有多个属性,int price;项目清单;项目描述。子列表项可以有多个 itemName 字符串。

当我们试图访问 rasterMap 中的 itemName 时,它​​只是访问列表中的最后一项。我们如何在 rasterMap 中访问多个 itemName 的所有值?

我们的数据结构是:


{
    "Orders": {
        "-MPuETb4vq2NdtQl-_y1": {
            "name": "Pulled Pork Sandwich",
            "price": 14.00

        },
        "-fbdhfunshy-_y2": {
            "name": "BBQ Spare Ribs",
            "price": 14.00

        }
    }
}
----Begin code---

//List to create orderItem with object item
    List<Item> orderItems = []; 
//List to create orderList with object item
    List<Order> orderList = [];


//Retrieve JSON
//Firebase connection here
 if (!_checkIfObjectExist(orderDate)) {
    Item itemObj = Item.fromJson(event.documents[i].data);
        orderItems.add(itemObj);
    Order orderObj = Order.fromJson(event.documents[i].data);

}
//iterate through order list 
  for (int i = 0; i < orderList.length; i++ ) {
      print(orderList);
      for(int j = 0; j < orderList[i].item.length; j++) {
        itemName = orderList[i].item[j].itemName;
        print(itemName);
      }
  }

Map<String, dynamic> rasterMap = {
          'appendBitmapText':
        "LIST ITEM NAMES IN THIS STRING MAP HERE"
        };

【问题讨论】:

  • 你能发布一个示例 JSON 数据吗(请不要简短)?
  • 首先,你的数据有一些错误;第二,您可以在上面的消息中正确发布它吗?如果是完整的数据或链接更好
  • @Ουιλιαμ Αρκευα 谢谢 - 我编辑了上面的评论。有什么想法吗?
  • 兄弟,在处理任何数据时,您首先需要验证其完整性和正确性。有任何错误,特别是[0][1]。您可以使用此online validator 查看这些错误。我有使用 Json 数据的经验,但没有太多使用 Firebase 的经验。
  • 校验JSON数据后,如何将数据迭代并添加为rasterMap中的字符串列表?

标签: flutter dart


【解决方案1】:
import 'dart:convert';

// your current structure
const rawData = '''
{
  "Orders": {
    "-MPuETb4vq2NdtQl-_y1": {
      "name": "Pulled Pork Sandwich",
      "price": 14.00
    },
    "-fbdhfunshy-_y2": {
      "name": "BBQ Spare Ribs",
      "price": 14.00
    }
  }
}
''';

// My suggestion for your structure
const rawData2 = '''
{
  "Orders": [
    {
      "id": "-MPuETb4vq2NdtQl-_y1",
      "name": "Pulled Pork Sandwich",
      "price": 14.00
    },
    {
      "id": "-fbdhfunshy-_y2",
      "name": "BBQ Spare Ribs",
      "price": 14.00
    }
  ]
}
''';


class Order {
  String? id, name;
  double? price;

  Order.fromJson(Map<String, dynamic> json) {
    id = json['id'];
    name = json['name'];
    price = json['price'];
  }
}


void main(List<String> args) {
  final data = jsonDecode(rawData2)['Orders'] as List;
  var orders = <Order>[];
  
  data.forEach((m) => orders.add(Order.fromJson(m as Map<String, dynamic>)));
  print(orders);
}

结果:

[Instance of 'Order', Instance of 'Order']

【讨论】:

    猜你喜欢
    • 2016-10-14
    • 1970-01-01
    • 2021-08-29
    • 2014-08-08
    • 2021-09-08
    • 2011-03-23
    • 1970-01-01
    • 2013-05-06
    相关资源
    最近更新 更多