首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将API数据映射到Dart类

将API数据映射到Dart类
EN

Stack Overflow用户
提问于 2021-12-13 11:02:27
回答 1查看 73关注 0票数 0

我在Dart中有一个POJO类,我希望使用一个API调用来映射变量。

这是我在Code-1的POJO课程,

代码语言:javascript
复制
class Elements {
  String onApi;
  String tlApi;
  String pl1Api;
  String pl2Api;
  String dl1Api;
  String dl2Api;
  String fnApi;
  String lnApi;
  String cnApi;
  String eidApi;

  Elements(
      {this.onApi,
      this.tlApi,
      this.pl1Api,
      this.pl2Api,
      this.dl1Api,
      this.dl2Api,
      this.fnApi,
      this.lnApi,
      this.cnApi,
      this.eidApi});

  Elements.fromJson(Map<String, dynamic> json) {
    onApi = json['on_api'];
    tlApi = json['tl_api'];
    pl1Api = json['pl1_api'];
    pl2Api = json['pl2_api'];
    dl1Api = json['dl1_api'];
    dl2Api = json['dl2_api'];
    fnApi = json['fn_api'];
    lnApi = json['ln_api'];
    cnApi = json['cn_api'];
    eidApi = json['eid_api'];
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['on_api'] = this.onApi;
    data['tl_api'] = this.tlApi;
    data['pl1_api'] = this.pl1Api;
    data['pl2_api'] = this.pl2Api;
    data['dl1_api'] = this.dl1Api;
    data['dl2_api'] = this.dl2Api;
    data['fn_api'] = this.fnApi;
    data['ln_api'] = this.lnApi;
    data['cn_api'] = this.cnApi;
    data['eid_api'] = this.eidApi;
    return data;
  }
}

Code.1

下面是我想通过Code.2中的API调用映射的JSON代码,

代码语言:javascript
复制
{
    "on_api": "1",
    "tl_api": "10",
    "pl1_api": "XYZ Chocolates Lounge",
    "pl2_api": "ABC Nagar",
    "dl1_api": "EFGH Software Pvt. Ltd.",
    "dl2_api": "Random Road, Bengaluru - 5600XX",
    "fn_api": "Snehanshu",
    "ln_api": "Bhattacharya",
    "cn_api": "01234",
    "eid_api": "snehanshu@abc.com"
}

Code.2

这是我的API调用类Code.3,

代码语言:javascript
复制
import 'dart:convert';
import 'package:http/http.dart';
import 'package:smoorapplication/src/constants/constants.dart';
import 'package:smoorapplication/src/model/elements.dart';

Future<dynamic> apiGetOrder() async{
  var response = await get(Uri.parse(API_LINK));
  var jsonData = jsonDecode(response.body);
  List<Elements> elements = [];

  for(var u in jsonData){
    Elements element =
    Elements.fromJson(u);
    elements.add(element);
  }

  print(elements.length);
  return elements;
}

Code.3

因此,在编写API调用的代码时,我需要一些帮助,以便它能够成功地映射数据。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2021-12-13 11:08:41

你的模型课

代码语言:javascript
复制
import 'dart:convert';

Element elementFromJson(String str) => Element.fromJson(json.decode(str));

String elementToJson(Element data) => json.encode(data.toJson());

class Element {
Element({
    this.onApi,
    this.tlApi,
    this.pl1Api,
    this.pl2Api,
    this.dl1Api,
    this.dl2Api,
    this.fnApi,
    this.lnApi,
    this.cnApi,
    this.eidApi,
});

String onApi;
String tlApi;
String pl1Api;
String pl2Api;
String dl1Api;
String dl2Api;
String fnApi;
String lnApi;
String cnApi;
String eidApi;

factory Element.fromJson(Map<String, dynamic> json) => Element(
    onApi: json["on_api"],
    tlApi: json["tl_api"],
    pl1Api: json["pl1_api"],
    pl2Api: json["pl2_api"],
    dl1Api: json["dl1_api"],
    dl2Api: json["dl2_api"],
    fnApi: json["fn_api"],
    lnApi: json["ln_api"],
    cnApi: json["cn_api"],
    eidApi: json["eid_api"],
);

Map<String, dynamic> toJson() => {
    "on_api": onApi,
    "tl_api": tlApi,
    "pl1_api": pl1Api,
    "pl2_api": pl2Api,
    "dl1_api": dl1Api,
    "dl2_api": dl2Api,
    "fn_api": fnApi,
    "ln_api": lnApi,
    "cn_api": cnApi,
    "eid_api": eidApi,
};
}

这是你的getAPiOrder方法

代码语言:javascript
复制
Future<dynamic> apiGetOrder() async{
var response = await get(Uri.parse(API_LINK));

///if this line doesn't work
Element element = Element.fromJson(respnse.body);

///try this line
Element element = Element.fromJson(Map.from(respnse.body));

 
 return elements;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70333585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档