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

如何在Dart/Flutter中解码Supabase返回的数据?

处理Supabase查询结果并转换为Dart对象

一、先明确返回数据的类型

你的Supabase查询返回的data已经是**List<Map<String, dynamic>>**类型,不需要再手动调用jsonDecode——SDK已经帮你完成了解析工作,这应该是你之前尝试解析失败的原因。

二、快速打印查询结果

直接遍历或打印整个列表就能看到数据:

// 打印完整结果
print(data);

// 格式化打印每个国家及下属城市
for (final country in data) {
  print('国家:${country['name']}');
  final cities = country['cities'] as List<dynamic>;
  for (final city in cities) {
    print('  城市:${city['name']}');
  }
}

三、转换为强类型Dart对象

为了更安全规范地使用数据,建议定义对应的实体类:

1. 定义实体类

// 城市实体
class City {
  final String name;

  City({required this.name});

  // 从Map转City对象
  factory City.fromMap(Map<String, dynamic> map) {
    return City(
      name: map['name'] as String,
    );
  }
}

// 国家实体
class Country {
  final String name;
  final List<City> cities;

  Country({required this.name, required this.cities});

  // 从Map转Country对象
  factory Country.fromMap(Map<String, dynamic> map) {
    final cityMaps = map['cities'] as List<dynamic>;
    final cities = cityMaps.map((map) => City.fromMap(map as Map<String, dynamic>)).toList();
    
    return Country(
      name: map['name'] as String,
      cities: cities,
    );
  }
}

2. 将查询结果转为实体类列表

// 转换为强类型列表
final List<Country> countries = data.map((map) => Country.fromMap(map as Map<String, dynamic>)).toList();

// 打印实体类数据
for (final country in countries) {
  print('国家:${country.name}');
  for (final city in country.cities) {
    print('  城市:${city.name}');
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 21:52:38