【问题标题】:How to get data from url that is in response JSON - Flutter如何从响应 JSON 的 url 获取数据 - Flutter
【发布时间】:2019-12-03 20:52:41
【问题描述】:

我在 JSON 中使用 GET 到 https://rickandmortyapi.com/api/character/。该 JSON 包含episode 的链接数组,例如https://rickandmortyapi.com/api/episode/4。如何从 episode 链接获取像 S01E04 这样的剧集名称? 我现在的代码是:

字符.类

import 'dart:convert';
import 'package:rick_and_morty_characters/services/webservice.dart';
import 'package:rick_and_morty_characters/utils/constants.dart';

class Character {
  final int id;
  final String name;
  final String status;
  final String image;
  final Episode episode;
  Character({this.id, this.name, this.status, this.image, this.episode});
  factory Character.fromJson(Map<String,dynamic> json) {
    return Character(
      id: json['id'],
      name: json['name'],
      status: json['status'],
      image: json['image'] ?? Constants.DEFAULT_AVATAR,
      episode: Episode.fromJson(json['episode'])
    );
  }

  static Resource<List<Character>> get all {
    return Resource(
        url: Constants.R_A_M_CHARACTERS,
        parse: (response) {
          final result = json.decode(response.body);
          Iterable list = result['results'];
          return list.map((model) => Character.fromJson(model)).toList();
        }
    );
  }
}

class Episode {
  final String episodeLink;
  Episode({this.episodeLink});
  factory Episode.fromJson(Map<String,dynamic> json) {
    return Episode(
      episodeLink: json['episode']
    );
  }
}

constants.dart

class Constants {
  static final String R_A_M_CHARACTERS = 'https://rickandmortyapi.com/api/character/';
  static final String DEFAULT_AVATAR = 'https://rickandmortyapi.com/api/character/avatar/1.jpeg';
}

webservice.dart

import 'package:http/http.dart' as http;
import 'package:http/http.dart';

class Resource<T> {
  final String url;
  T Function(Response response) parse;
  Resource({this.url,this.parse});
}

class Webservice {
  Future<T> load<T>(Resource<T> resource) async {
    final response = await http.get(resource.url);
    if(response.statusCode == 200) {
      return resource.parse(response);
    } else {
      throw Exception('Failed to load data!');
    }
  }
}

【问题讨论】:

    标签: json flutter dart get


    【解决方案1】:

    尝试在此处粘贴 JSON 示例

      https://app.quicktype.io/
    

    构建一个对象并复制粘贴 dart 代码。

    然后,当您从您的 api 获得响应时,只需将您的 JSON 解析为新创建的对象。

    并且只要使用对象来获取信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-19
      • 1970-01-01
      • 2021-02-04
      • 2014-03-13
      • 1970-01-01
      • 2022-12-22
      相关资源
      最近更新 更多