繁体   English   中英

Dart / Flutter Json 解析问题

[英]Dart / Flutter Json Parsing Issue

我正在尝试解析 Json 我的 Json 响应看起来像

{
    "status": true,
    "orderList": {
        "current_page": 1,
        "data": [
            {
                "orderId": 504,
                "orderNo": "ORD504",
                "restaurantId": 35,
                "restaurantName": "Burgerack",
                "address": "0A Edel Rd, Beyers Park, Boksburg, 1459, South Africa",
                "imageUlr": "uploads/restaurant/2011201907425023092019034122download (1).png",
                "createdAt": "20 Aug,2020 08:29 AM",
                "totalAmount": 155,
                "orderStatus": "Coming to You",
                "itemList": [
                    {
                        "itemQty": "1",
                        "itemName": "Cheesy chilli fries"
                    },
                    {
                        "itemQty": "1",
                        "itemName": "Chicken Salad"
                    },
                    {
                        "itemQty": "1",
                        "itemName": "Kids Chicken Burger & fries(No garnish)"
                    }
                ]
            },
            {
                "orderId": 503,
                "orderNo": "ORD503",
                "restaurantId": 45,
                "restaurantName": "McDonald's Rietfontien Road",
                "address": "Rietfontein Rd, Hughes, Boksburg, 1459, South Africa",
                "imageUlr": "uploads/restaurant/2011201907413931102019102725download.png",
                "createdAt": "20 Aug,2020 08:27 AM",
                "totalAmount": 139.9,
                "orderStatus": "Coming to You",
                "itemList": [
                    {
                        "itemQty": "1",
                        "itemName": "Sausage McMuffin® with Egg Meal"
                    },
                    {
                        "itemQty": "1",
                        "itemName": "Breakfast Meal"
                    },
                    {
                        "itemQty": "1",
                        "itemName": "Medium Fries"
                    },
                    {
                        "itemQty": "1",
                        "itemName": "A la Carte"
                    }
                ]
            }
        ],
        "from": 1,
        "last_page": 1,
        "next_page_url": null,
        "path": "http://myurl.com/api/driver/order/my-accepted-orders",
        "per_page": 20,
        "prev_page_url": null,
        "to": 2,
        "total": 2
    }
}

我正在使用下面的 class 来获取 json 并解析我能够解析正常的 json 但不是我的

import 'dart:async';
import 'dart:convert';

import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'package:delivery_template/network_utils/api.dart';

class OrderList {
  final int currentPage;
  final List<Data> datas;

  OrderList({this.currentPage, this.datas});

  factory OrderList.fromJson(Map<String, dynamic> parsedJson) {
    var list = parsedJson['data'] as List;
    print(list.runtimeType);
    List<Data> datalist = list.map((i) => Data.fromJson(i)).toList();

    return OrderList(currentPage: parsedJson['current_page'], datas: datalist);
  }
}

class Data {
  String orderId;
  String orderNo;

  Data.fromJson(Map<String, dynamic> jsonMap) {
    this.orderId = jsonMap['orderId'];
    this.orderNo = jsonMap['orderNo'];
  }
}

class ActiveOrder {
  // final int orderId;
  // final String totalAmount;
  // final String restaurantName;
  // final String date;
  final List<OrderList> orders;

  //ActiveOrder({this.orderId, this.totalAmount, this.restaurantName, this.date});
  ActiveOrder({this.orders});

  factory ActiveOrder.fromJson(Map<String, dynamic> parsedJson) {
    var list = parsedJson['orderList'] as List;
    print(list.runtimeType);
    List<OrderList> orderList = list.map((i) => OrderList.fromJson(i)).toList();

    return ActiveOrder(orders: orderList);
  }
}


class ActiveOrdersListView extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return FutureBuilder<List<ActiveOrder>>(
      future: _fetchOrders(),
      builder: (context, snapshot) {
        if (snapshot.hasData) {
          List<ActiveOrder> data = snapshot.data;
          return _ordersListView(data);
        } else if (snapshot.hasError) {
          return Text("${snapshot.error}");
        }
        return CircularProgressIndicator();
      },
    );
  }

  Future<List<ActiveOrder>> _fetchOrders() async {
    var res = await Network().getData('/order/my-accepted-orders');
    if (res.statusCode == 200) {

      List jsonResponse = json.decode(res.body);
      return jsonResponse
          .map((i) => new ActiveOrder.fromJson(i))
          .toList();
    } else {
      throw Exception('Failed to load jobs from API');
    }
  }

  ListView _ordersListView(data) {
    return ListView.builder(
        itemCount: data.length,
        itemBuilder: (context, index) {
          //   return _tile(
          //       data[index].restaurantName, data[index].orderId, Icons.work);
          // });
          return _tile("Test heading", "Test Subheading", Icons.work);
        });
  }

  ListTile _tile(String title, String subtitle, IconData icon) => ListTile(
        title: Text(title,
            style: TextStyle(
              fontWeight: FontWeight.w500,
              fontSize: 20,
            )),
        subtitle: Text(subtitle),
        leading: Icon(
          icon,
          color: Colors.blue[500],
        ),
      );
}

我收到以下错误

type '_InternalLinkedHashMap<String, dynamic>' 不是类型 'List' 的子类型

我是 Flutter 的新手,非常初学者,有人可以帮我解决这个问题

您需要解析非常复杂的 JSON 数据。 我建议你通过这篇文章go,这篇文章写得很好,解释了 JSON 中的所有类型的解析。

json.decode(res.body) 返回 Map 而不是列表。

换行

列出 jsonResponse = json.decode(res.body);

var response = json.decode(res.body["]);
列表 jsonResponse =response["orderList"]["data"];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM