You need to enable JavaScript to run this app. Flutter中如何解析REST API返回的JSON数据提取字符串列表
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中如何解析REST API返回的JSON数据提取字符串列表

Flutter JSON接口解析问题修复方案

现有代码的问题

  • 你错误地将接口返回的_categoryResponse['data']数组直接转为字符串,丢失了数组结构,导致后续无法提取每个分类的name字段
  • 缺失了请求状态校验、接口返回状态校验、异常捕获逻辑,容易出现崩溃问题

调整后代码(直接提取字符串列表)

不需要额外定义模型类,直接遍历数据提取你需要的name字段即可:

import 'package:http/http.dart' as http;
import 'dart:convert';

// 存储最终的分类名称列表
List<String> allCategories = [];

Future fetchCategories() async {
  try {
    final response = await http.get(_categories);
    // 先校验HTTP请求是否成功
    if (response.statusCode == 200) {
      final Map<String, dynamic> resJson = jsonDecode(response.body);
      // 校验接口返回的业务状态
      if (resJson['status'] == true) {
        // 获取data数组,遍历提取所有name字段
        final List<dynamic> dataList = resJson['data'];
        allCategories = dataList.map((item) => item['name'].toString()).toList();
        // 此时allCategories就是你需要的格式:['Chicken roll', 'Fresh salads', 'Wrape', 'Pizza', 'Fried chicken', 'Veggie', 'Burgers']
      } else {
        print('接口业务错误:${resJson['error_message']}');
      }
    } else {
      print('HTTP请求错误,状态码:${response.statusCode}');
    }
  } catch (e) {
    print('请求或解析出错:$e');
  }
}

可选:保留完整分类数据的模型类方案

如果你后续需要用到分类的id字段,可以先定义模型类再解析:

  1. 定义分类模型
class Category {
  final int id;
  final String name;

  Category({required this.id, required this.name});

  factory Category.fromJson(Map<String, dynamic> json) {
    return Category(
      id: json['id'],
      name: json['name'],
    );
  }
}
  1. 解析逻辑调整
List<Category> allCategoryModels = [];
List<String> allCategories = [];

Future fetchCategories() async {
  // 前面的请求、校验逻辑和上面一致
  // ...
  if (resJson['status'] == true) {
    final List<dynamic> dataList = resJson['data'];
    allCategoryModels = dataList.map((item) => Category.fromJson(item)).toList();
    allCategories = allCategoryModels.map((e) => e.name).toList();
  }
  // ...
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 07:24:01