首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >拼合dart中列表的动态列表

拼合dart中列表的动态列表
EN

Stack Overflow用户
提问于 2019-07-16 13:38:14
回答 1查看 967关注 0票数 3

我有以下json,我正在用dart解码:

代码语言:javascript
复制
[{"page":1, "items": [1, 2]}, {"page":2, "items": [3, 4]}]

我想把它扁平化成一个单独的项目列表:[1, 2, 3, 4]。我尝试的第一种天真的方式是:

代码语言:javascript
复制
final x = items.expand((p) => p['items']);

但是它给了我这个错误:

代码语言:javascript
复制
Uncaught exception:
TypeError: Closure 'main_closure': type '(dynamic) => dynamic' is not a subtype of type '(dynamic) => Iterable<dynamic>'

所以我假设问题是p['items']没有被识别为Iterable,然后我尝试了其他方法,但都没有成功:

代码语言:javascript
复制
final x = items.expand((p) => p['items'] as List<int>);
// CastError: Instance of 'JSArray': type 'JSArray' is not a subtype of type 'List<int>'

final x = items.expand((p) => p['items'].map((i) => i as int);
// TypeError: Closure 'main_closure': type '(dynamic) => dynamic' is not a subtype of type '(dynamic) => Iterable<dynamic>'

下面是代码,也是用于在线运行的dartPad

代码语言:javascript
复制
import 'dart:convert';

void main() {
  const jsonString = '[{"page":1, "items": [1, 2]}, {"page":2, "items": [3, 4]}]';
  final items = json.decode(jsonString);
  //final x = items.expand((p) => p['items']);
  //final x = items.expand((p) => p['items'].map((i) => i as int);
  print(x);

  // When the list is not dynamic, it works
  const foo = [{"page":1, "items": [11, 22]}, {"page":2, "items": [33, 44]}];
  final y = foo.expand((p) => p['items']);
  print(y); // => [1, 2, 3, 4];

  // Example from dart's website
  const pairs = [[1, 2], [3, 4]];
  final flattened = pairs.expand((pair) => pair).toList();
  print(flattened); // => [1, 2, 3, 4];
}

当列表是动态的时,我如何使用do this?json似乎足够简单,可以用json.decode来完成这项工作,而不是设置built_value这样的东西来完成这项工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-16 13:45:08

只需将解码后的对象转换为List

代码语言:javascript
复制
const jsonString = '[{"page":1, "items": [1, 2]}, {"page":2, "items": [3, 4]}]';
final items = json.decode(jsonString) as List;
final x = items.expand((p) => p['items']);
print(x);

或者使用固定的List类型:

代码语言:javascript
复制
final List items = json.decode(jsonString);
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57050652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档