flutter 我认为在Dart中解析这种类型的json响应是不可能的,我如何将这个json转换为Dart类?

6pp0gazn  于 2022-12-27  发布在  Flutter
关注(0)|答案(2)|浏览(177)

一个API给了我如下的json响应:

[{"version": "v3.5"}, {"setup": true}, {"address": "e7d398b"}, {"connected": true}, {"active": true}, {"id": "ce7143"}, {"genuine": true}]

正如你所看到的,这是一个对象列表,我试着用quicktype生成的模型类来解析它-

List<Result>.from(result.map((x) => Result.fromJson(x)));

但是它失败了,因为每个对象都是不同类型的。
我想我必须将数组中的每个对象逐一转换为Dart类,并将其添加到Array中。
所以我尝试了这个(我正在使用dio)-

final result = response.data;
var b = List.empty(growable: true);
result.map((x) => b.add(x));

但它不起作用。
我怎样才能至少访问数组的元素呢?

3htmauhk

3htmauhk1#

没有JSON是不能用Dart解析的。但是你可能会得到一个需要小心导航的数据结构。类使它更容易,但是并不总是有一个类结构适合任何JSON,也许这就是你的观点。在这种情况下,你必须以一种特别的方式导航到感兴趣的数据。

d7v8vwbk

d7v8vwbk2#

正如上面提到的Randal Schwartz,没有JSON不能用Dart解析,在您的例子中,您有Map对象的List,您可以做的是:

final data = jsonDecode(json) as List;

    Map<String, dynamic> map = {};

    for (var e in data) {
      map.addAll(e);
    }
    print(map);

 //prints

{version: v3.5, setup: true, address: e7d398b, connected: true, active: true, id: ce7143, genuine: true}

如果你使用的是dio flutter包,它会返回解码后的json,不需要调用jsonDecode,如果你面对大的json,我推荐使用json code generation,而不是依赖quicktype生成的模型。

相关问题