首页 > 解决方案 > 当我从 Flutter 中的 API 获取数据时出现问题。请帮我获取数据并显示它。我的数据是这样的

问题描述

{
    "success": true,
    "data": {
        "name": {
            "uz": "tez kunlarda Dota haqida anime o'zbek tilida",
            "ru": "скоро аниме по мотивом игры дота на узбекском языке"
        },
        "description": {
            "uz": "E'lon bilan bir qatorda ijodkorlar",
            "ru": "Вместе с анонсом создатели"
        },
        "videoLink": " ",
        "date": "2021-03-15T12:09:29.653Z",
        "status": true,
        "_id": "604ff84e6a914c2f1dfa9a6a",
        "slug": "3383590",
        "image": "/public/uploads/cinema/8c926c1344dae65a03dcdbf1acb71a10.jpg",
        "__v": 0
    }
}

标签: jsonflutterapidartparsing

解决方案


您可以使用此https://app.quicktype.io/,很简单,输入您的 api 答案并选择 dart,将其放入文件中,您可以轻松访问您的数据当您格式化 json 文件时,您会得到:

{
   "success":true,
   "data":{
      "name":{
         "uz":"tez kunlarda Dota haqida anime o'zbek tilida",
         "ru":"скоро аниме по мотивом игры дота на узбекском языке"
      },
      "description":{
         "uz":"E'lon bilan bir qatorda ijodkorlar",
         "ru":"Вместе с анонсом создатели"
      },
      "videoLink":" ",
      "date":"2021-03-15T12:09:29.653Z",
      "status":true,
      "_id":"604ff84e6a914c2f1dfa9a6a",
      "slug":"3383590",
      "image":"/public/uploads/cinema/8c926c1344dae65a03dcdbf1acb71a10.jpg",
      "__v":0
   }
}

我给你的链接会给你这个答案:别忘了在 this 前面加上 required 。

// To parse this JSON data, do
//
//     final stackOverflow = stackOverflowFromJson(jsonString);

import 'dart:convert';

StackOverflow stackOverflowFromJson(String str) => StackOverflow.fromJson(json.decode(str));

String stackOverflowToJson(StackOverflow data) => json.encode(data.toJson());

class StackOverflow {
    StackOverflow({
        this.success,
        this.data,
    });

    bool success;
    Data data;

    factory StackOverflow.fromJson(Map<String, dynamic> json) => StackOverflow(
        success: json["success"],
        data: Data.fromJson(json["data"]),
    );

    Map<String, dynamic> toJson() => {
        "success": success,
        "data": data.toJson(),
    };
}

class Data {
    Data({
        this.name,
        this.description,
        this.videoLink,
        this.date,
        this.status,
        this.id,
        this.slug,
        this.image,
        this.v,
    });

    Description name;
    Description description;
    String videoLink;
    DateTime date;
    bool status;
    String id;
    String slug;
    String image;
    int v;

    factory Data.fromJson(Map<String, dynamic> json) => Data(
        name: Description.fromJson(json["name"]),
        description: Description.fromJson(json["description"]),
        videoLink: json["videoLink"],
        date: DateTime.parse(json["date"]),
        status: json["status"],
        id: json["_id"],
        slug: json["slug"],
        image: json["image"],
        v: json["__v"],
    );

    Map<String, dynamic> toJson() => {
        "name": name.toJson(),
        "description": description.toJson(),
        "videoLink": videoLink,
        "date": date.toIso8601String(),
        "status": status,
        "_id": id,
        "slug": slug,
        "image": image,
        "__v": v,
    };
}

class Description {
    Description({
        this.uz,
        this.ru,
    });

    String uz;
    String ru;

    factory Description.fromJson(Map<String, dynamic> json) => Description(
        uz: json["uz"],
        ru: json["ru"],
    );

    Map<String, dynamic> toJson() => {
        "uz": uz,
        "ru": ru,
    };
}

然后,当您从服务器获得正确答案时,您需要执行以下操作:

//r is my api response

if (r.statusCode >= 200 && r.statusCode < 300) {
    final String responseString = r.body;

    StackOverflow res =  stackOverflowFromJson(responseString);
// get what you want with res.<thing you want to access>
  }

推荐阅读