Flutter中如何获取嵌套数据内的referralCode?
在Flutter中解析嵌套JSON获取referralCode字段的方法
原始响应数据结构:
{"dynamic_link_data":{"data":{"referralCode":"1234"}}}
方法一:手动解析JSON
无需额外依赖,直接通过键值逐层访问:
import 'dart:convert'; void extractReferralCode() { // 模拟接口返回的响应字符串 String responseStr = '{"dynamic_link_data":{"data":{"referralCode":"1234"}}}'; // 将JSON字符串转为Map结构 Map<String, dynamic> responseMap = jsonDecode(responseStr); // 逐层获取嵌套的referralCode字段 String referralCode = responseMap['dynamic_link_data']['data']['referralCode']; print(referralCode); // 输出:1234 }
如果需要处理字段可能不存在的情况,可通过空安全操作符避免报错:
String referralCode = responseMap['dynamic_link_data']?['data']?['referralCode'] ?? '默认值';
方法二:使用json_serializable生成模型类
适合复杂JSON结构,提升代码可维护性:
- 在
pubspec.yaml中添加依赖:
dependencies: json_annotation: ^4.8.1 dev_dependencies: build_runner: ^2.4.4 json_serializable: ^6.7.0
- 创建模型类文件(例如
dynamic_link_model.dart):
import 'package:json_annotation/json_annotation.dart'; part 'dynamic_link_model.g.dart'; @JsonSerializable() class DynamicLinkResponse { @JsonKey(name: 'dynamic_link_data') final DynamicLinkData dynamicLinkData; DynamicLinkResponse({required this.dynamicLinkData}); factory DynamicLinkResponse.fromJson(Map<String, dynamic> json) => _$DynamicLinkResponseFromJson(json); } @JsonSerializable() class DynamicLinkData { final Data data; DynamicLinkData({required this.data}); factory DynamicLinkData.fromJson(Map<String, dynamic> json) => _$DynamicLinkDataFromJson(json); } @JsonSerializable() class Data { final String referralCode; Data({required this.referralCode}); factory Data.fromJson(Map<String, dynamic> json) => _$DataFromJson(json); }
- 运行命令生成序列化代码:
flutter pub run build_runner build
- 解析JSON并获取字段:
import 'dart:convert'; import 'dynamic_link_model.dart'; void extractReferralCode() { String responseStr = '{"dynamic_link_data":{"data":{"referralCode":"1234"}}}'; Map<String, dynamic> responseMap = jsonDecode(responseStr); DynamicLinkResponse response = DynamicLinkResponse.fromJson(responseMap); String referralCode = response.dynamicLinkData.data.referralCode; print(referralCode); // 输出:1234 }
内容的提问来源于stack exchange,提问作者wolfsoft Developer
相关产品推荐
相关产品推荐

