错误:清单 不是Map类型的子类型

我目前正在构建一个应用程序,以通过api读取数据,并且试图从JSON Placeholder解析JSON api。

我为用户创建了一个模型类(users_future_model.dart):

class Users {

final int userID;

final String name;

final String username;

final String email;

final Address address;

Users({this.userID, this.name, this.username, this.email, this.address});

factory Users.fromJson(Map<String, dynamic> usersjson)=> Users(

userID: usersjson["id"],

name: usersjson["name"],

username: usersjson["username"],

email: usersjson["email"],

address: Address.fromJson(usersjson["address"])

);

}

class Address{

final String street;

final String suite;

final String city;

final String zipcode;

Address({this.street, this.suite, this.city, this.zipcode});

factory Address.fromJson(Map<String, dynamic> addjson){

return Address(

street: addjson["street"],

suite: addjson["suite"],

city: addjson["city"],

zipcode: addjson["zipcode"]

);

}

}

这是将json读取到小部件中的main.dart:

import 'package:flutter/material.dart';

import 'model/users_future_model.dart';

import 'dart:convert';

import 'dart:async';

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

final String jsonplaceholder = "http://jsonplaceholder.typicode.com/users/";

//Future method to read the URL

Future<Users> fetchInfo() async{

final response = await http.get(jsonplaceholder);

final jsonresponse = json.decode(response.body);

return Users.fromJson(jsonresponse);

}

void main() {

runApp(new MyApp());

}

class MyApp extends StatelessWidget {

@override

Widget build(BuildContext context) {

return new MaterialApp(

home: new MyHomePage(),

);

}

}

class MyHomePage extends StatefulWidget {

@override

_MyHomePageState createState() => new _MyHomePageState();

}

class _MyHomePageState extends State<MyHomePage> {

@override

Widget build(BuildContext context) {

return new Scaffold(

appBar: new AppBar(

title: new Text("Parse JSON"),

),

body: new Center(

child: new Column(

children: <Widget>[

new FutureBuilder(

future: fetchInfo(),

builder: (context, snapshot){

if(snapshot.hasData){

return new Text(snapshot.data.email);

}else if(snapshot.hasError){

return new Text("Error ${snapshot.error}");

}

})

],

),

)

);

}

}

这是我尝试读取的JSON信息,尽管它只是其中的一小部分:

{

id: 1,

name: "Leanne Graham",

username: "Bret",

email: "Sincere@april.biz",

address: {

street: "Kulas Light",

suite: "Apt. 556",

city: "Gwenborough",

zipcode: "92998-3874",

geo: {

lat: "-37.3159",

lng: "81.1496"

}

},

phone: "1-770-736-8031 x56442",

website: "hildegard.org",

company: {

name: "Romaguera-Crona",

catchPhrase: "Multi-layered client-server neural-net",

bs: "harness real-time e-markets"

}

}

我当前遇到的错误是:

Error type 'List<dynamic>' is not a subtype of type 'Map<String, dynamic>'

我该如何纠正此错误?

回答:

API返回JSON数组而不是json对象,因此列表不是Map。

即用户json是Json Array的第一个元素。

因此,要获取第一个元素,请使用第一个索引。内部获取信息更新

return Users.fromJson(jsonresponse[0]);

以上是 错误:清单 不是Map类型的子类型 的全部内容, 来源链接: utcz.com/qa/403609.html

回到顶部