[英]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.