首页 > 解决方案 > 如何在 http json 中更深一层?

问题描述

如何解开“数据”的 json更深一层,以便可以将其正确存储在专辑类中?提前致谢!

{
    "data": {
        "id": 3,
        "userId": 2,
        "title": "Lorem ipsum"
    }
}

获取请求:

import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'package:http/http.dart' as http;
import 'package:activity/models/Album.dart';

Future<Album> fetchAlbum() async {
  final response = await http.get('http://localhost:8000/album/1');

  if (response.statusCode == 200) {
    return Album.fromJson(json.decode(response.body)); // Values not assigned to Album
  } else {
    throw Exception('Failed to load album');
  }
}

未分配值,因为顶级是 json 的“数据”

class Album {
  final int userId;
  final int id;
  final String title;

  Album({this.userId, this.id, this.title});

  factory Album.fromJson(Map<String, dynamic> json) {
    return Album(
      userId: json['userId'],
      id: json['id'],
      title: json['title'],
    );
  }
}

标签: jsonapihttpflutter

解决方案


您可以使用它json.decode来获取Map
并将其用作 代码片段Map的参数Album.fromJson

Future<Album> fetchAlbum() async {
    final response = await http.get('http://localhost:8000/album/1');

    if (response.statusCode == 200) {
      var responseData = json.decode(response.body);
      return Album.fromJson(responseData["data"]);      
    } else {
      throw Exception('Failed to load album');
    }
  }

推荐阅读