Dart解析OpenAI模型JSON响应时遇类型不匹配错误
问题原因
你导入的model_model.dart文件中存在另一个Model类,和当前文件定义的Model类产生命名冲突,导致ModelResponse在解析时使用了错误的Model类,该类可能包含字段类型定义错误(例如将permission这类Map/List类型字段定义为String),从而触发类型不匹配错误。
解决方案
1. 移除冲突导入
删掉ModelResponse类顶部的import 'package:flutter_chatgpt/src/data/models/model_model.dart';语句,当前文件已经定义了所需的Model类,无需重复导入。
2. (可选)完善Model类(如需解析完整字段)
如果需要完整解析OpenAI返回的模型数据,可以扩展Model类并新增Permission类,代码如下:
class ModelResponse { ModelResponse({ required this.object, required this.data, }); late final String object; late final List<Model> data; ModelResponse.fromJson(Map<String, dynamic> json){ object = json['object']; data = List.from(json['data']).map((e)=>Model.fromJson(e)).toList(); } Map<String, dynamic> toJson() { final _data = <String, dynamic>{}; _data['object'] = object; _data['data'] = data.map((e)=>e.toJson()).toList(); return _data; } } class Model { Model({ required this.id, required this.object, required this.created, required this.ownedBy, required this.permission, required this.root, required this.parent, }); late final String id; late final String object; late final int created; late final String ownedBy; late final List<Permission> permission; late final String root; late final String? parent; Model.fromJson(Map<String, dynamic> json){ id = json['id']; object = json['object']; created = json['created']; ownedBy = json['owned_by']; permission = List.from(json['permission']).map((e)=>Permission.fromJson(e)).toList(); root = json['root']; parent = json['parent']; } Map<String, dynamic> toJson() { final data = <String, dynamic>{}; data['id'] = id; data['object'] = object; data['created'] = created; data['owned_by'] = ownedBy; data['permission'] = permission.map((e)=>e.toJson()).toList(); data['root'] = root; data['parent'] = parent; return data; } } class Permission { Permission({ required this.id, required this.object, required this.created, required this.allowCreateEngine, required this.allowSampling, required this.allowLogprobs, required this.allowSearchIndices, required this.allowView, required this.allowFineTuning, required this.organization, required this.group, required this.isBlocking, }); late final String id; late final String object; late final int created; late final bool allowCreateEngine; late final bool allowSampling; late final bool allowLogprobs; late final bool allowSearchIndices; late final bool allowView; late final bool allowFineTuning; late final String organization; late final dynamic group; late final bool isBlocking; Permission.fromJson(Map<String, dynamic> json){ id = json['id']; object = json['object']; created = json['created']; allowCreateEngine = json['allow_create_engine']; allowSampling = json['allow_sampling']; allowLogprobs = json['allow_logprobs']; allowSearchIndices = json['allow_search_indices']; allowView = json['allow_view']; allowFineTuning = json['allow_fine_tuning']; organization = json['organization']; group = json['group']; isBlocking = json['is_blocking']; } Map<String, dynamic> toJson() { final data = <String, dynamic>{}; data['id'] = id; data['object'] = object; data['created'] = created; data['allow_create_engine'] = allowCreateEngine; data['allow_sampling'] = allowSampling; data['allow_logprobs'] = allowLogprobs; data['allow_search_indices'] = allowSearchIndices; data['allow_view'] = allowView; data['allow_fine_tuning'] = allowFineTuning; data['organization'] = organization; data['group'] = group; data['is_blocking'] = isBlocking; return data; } }
3. 确保API响应解析流程正确
发起请求时,务必将响应体解码为Map<String, dynamic>后再传入ModelResponse.fromJson,示例代码:
import 'dart:convert'; import 'package:http/http.dart' as http; Future<ModelResponse> fetchModels() async { final response = await http.get( Uri.parse('https://api.openai.com/v1/models'), headers: { 'Authorization': 'Bearer YOUR_API_KEY', 'Content-Type': 'application/json', }, ); if (response.statusCode == 200) { final jsonData = json.decode(response.body); return ModelResponse.fromJson(jsonData); } else { throw Exception('Failed to fetch models: ${response.statusCode}'); } }
内容的提问来源于stack exchange,提问作者Takshak Rajput
相关产品推荐
相关产品推荐

