将json响应添加到flutter中的列表

Posted

技术标签:

【中文标题】将json响应添加到flutter中的列表【英文标题】:Add json response to a list in flutter 【发布时间】:2021-10-11 00:33:00 【问题描述】:

所以我正在使用来自 rest 服务的这个 API,它以以下 json 格式向我发送数据。

API 响应

"data": [
    
        "id": 3,
        "title": "Lorem Ipsum Post",
        "excerpt": "This is the excerpt for the Lorem Ipsum Post",
        "body": "<p>This is the body of the lorem ipsum post</p>",
        "created_at": "2021-08-03T11:54:52.000000Z",
        "updated_at": "2021-08-03T11:54:52.000000Z"
    ,
    
        "id": 4,
        "title": "My Sample Post",
        "excerpt": "This is the excerpt for the sample Post",
        "body": "<p>This is the body for the sample post, which includes the body.</p>\n                <h2>We can use all kinds of format!</h2>\n                <p>And include a bunch of other stuff.</p>",
        "created_at": "2021-08-03T11:54:52.000000Z",
        "updated_at": "2021-08-03T11:54:52.000000Z"
    ,
]

我使用以下方法将来自 api 响应的值插入到我以后需要使用的列表中。

我使用的方法

Future<List<Post>> getAllPosts(String token) async 
final ApiResponse apiResponse = await _apiBaseHelper.get(
    "https://test.sugayo.com/api/cg/posts/limit/3",token);
Post allPost=Post.fromJson(jsonDecode(apiResponse.data));
List<Post> allPostList=[Post(id: allPost.id, subtitle: allPost.subtitle, secondaryText: allPost.secondaryText, body: allPost.body)];
return allPostList;

在终端中我收到此错误 错误:需要一个“Map”类型的值,但得到一个“List”类型的值 并且返回的列表为空。请帮助

【问题讨论】:

在此处尝试我的答案,以从此处***.com/a/68533647/13997210 或此处***.com/a/68594656/13997210 的 API 获取数据,希望对您有所帮助 请添加完整的 API 响应。 “数据”块是否用大括号括起来? Post.fromJson() 将什么作为输入。请在问题中也添加该方法。 【参考方案1】:

由于响应是一个帖子列表,而不仅仅是一个帖子,你应该得到这样的列表:

Map<String, dynamic> result = json.decode(response.body);
List<Post> posts = List<Post>.from(result['data'].map((dynamic row) => Post.fromJson(row)));

【讨论】:

【参考方案2】:
Future<List<Post>> getAllPosts(String token) async 

final ApiResponse apiResponse = await _apiBaseHelper.get(
    "https://test.sugayo.com/api/cg/posts/limit/3",token);
    
final responsebody=jsonDecode(apiResponse.body) as List;

final allPostList= responsebody['data'].map((e) => Post.fromJson(e)).toList();

return allPostList;

【讨论】:

这是我的答案的复制过去

以上是关于将json响应添加到flutter中的列表的主要内容,如果未能解决你的问题,请参考以下文章

Flutter:JSON无键数组到列表

Flutter 将 json 响应加载到 List

如何将 json 列表传递给 Flutter 中的 http 请求(post)正文?

Flutter 嵌套 JSON 到列表视图

将检索到的json转换为flutter中的自定义对象列表

Flutter Getx - 更新子列表中的项目不是反应性的