简体   繁体   English

如何从响应 JSON 的 url 获取数据 - Flutter

[英]How to get data from url that is in response JSON - Flutter

I am using GET to https://rickandmortyapi.com/api/character/ in JSON.我在 JSON 中使用 GET 到https://rickandmortyapi.com/api/character/ That JSON contains an array of links of episode , like https://rickandmortyapi.com/api/episode/4 .该 JSON 包含一系列episode链接,例如https://rickandmortyapi.com/api/episode/4 How can I GET episode name like S01E04 from episode link?如何从episode链接中获取像S01E04这样的剧集名称? My code now is:我现在的代码是:

character.class字符类

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常量.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网络服务.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!');
    }
  }
}

try pasting an example of your JSON here尝试在此处粘贴 JSON 示例

  https://app.quicktype.io/

the build an object and copy paste the dart code.构建一个对象并复制粘贴 dart 代码。

Then, when you get a response from your api, just parse your JSON to the newly created object.然后,当您从 api 获得响应时,只需将您的 JSON 解析为新创建的对象。

And the just use the object as you wish to get the info.并且只需按照您的意愿使用该对象即可获取信息。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM