You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Flutter Dart项目创建复杂JSON对应的Model类?

Dart Model类实现方案

针对你提供的JSON结构,下面是对应的Dart Model类实现,包含完整的序列化/反序列化方法:

1. 菜品项模型(MenuItem)

对应JSON数组里的单个菜品对象:

class MenuItem {
  final String id;
  final String title;
  final String price;
  final String image;
  final String visibility;

  MenuItem({
    required this.id,
    required this.title,
    required this.price,
    required this.image,
    required this.visibility,
  });

  // 从JSON解析
  factory MenuItem.fromJson(Map<String, dynamic> json) {
    return MenuItem(
      id: json['id'],
      title: json['t'],
      price: json['p'],
      image: json['i'],
      visibility: json['v'],
    );
  }

  // 转成JSON
  Map<String, dynamic> toJson() {
    return {
      'id': id,
      't': title,
      'p': price,
      'i': image,
      'v': visibility,
    };
  }
}

2. 主响应模型(FoodResponse)

对应最外层的JSON结构,其中list字段是键为字符串、值为菜品列表的Map:

class FoodResponse {
  final String status;
  final Map<String, List<MenuItem>> list;

  FoodResponse({
    required this.status,
    required this.list,
  });

  // 从JSON解析
  factory FoodResponse.fromJson(Map<String, dynamic> json) {
    Map<String, List<MenuItem>> parsedList = {};
    json['list'].forEach((key, value) {
      List<MenuItem> items = (value as List)
          .map((item) => MenuItem.fromJson(item))
          .toList();
      parsedList[key] = items;
    });

    return FoodResponse(
      status: json['status'],
      list: parsedList,
    );
  }

  // 转成JSON
  Map<String, dynamic> toJson() {
    Map<String, dynamic> jsonList = {};
    list.forEach((key, value) {
      jsonList[key] = value.map((item) => item.toJson()).toList();
    });

    return {
      'status': status,
      'list': jsonList,
    };
  }
}

使用示例

解析JSON字符串的示例代码:

import 'dart:convert';

String jsonString = '''
{
    "status": "1",
    "list": {
        "4": [
            {
                "id": "1289",
                "t": "Mutton biriyani",
                "p": "21",
                "i": "1289_5305.jpg",
                "v": "0"
            },
            {
                "id": "1288",
                "t": "Chicken biriyani",
                "p": "14",
                "i": "1288_5339.jpg",
                "v": "0"
            }
        ]
    }
}
''';

// 解析JSON
Map<String, dynamic> jsonMap = jsonDecode(jsonString);
FoodResponse response = FoodResponse.fromJson(jsonMap);

// 访问数据
print('状态:${response.status}');
response.list['4']?.forEach((item) {
  print('菜品:${item.title},价格:${item.price}');
});

内容的提问来源于stack exchange,提问作者FoodBell UAE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 06:30:47