在Dart中使用JsonObject库解析JSON列表

3

我正在尝试使用JsonOject库解析一些JSON。但是出现了以下异常:

 Exception: type 'List' is not a subtype of type 'Map' of 'value'.

我的代码:

class MyList extends JsonObject implements List { 
  MyList();

  factory MyList.fromString(String jsonString) {
    return new JsonObject.fromJsonString(jsonString, new MyList());
  }
}

class MyResult extends JsonObject { 
  num Dis;
  int Flag;
  MyProduct Obj;
}

class MyProduct extends JsonObject { 
  int ID;
  String Title;
}

我会把它这样称呼:

然后我像这样调用:

var testJson = """
  [{"Dis":1111.1,"Flag":0,"Obj":{"ID":1,"Title":"Volvo 140"}},
  {"Dis":2222.2,"Flag":0,"Obj":{"ID":2,"Title":"Volvo 240"}}]
""";
MyList list = new MyList.fromString(testJson);
//I want to be able to do something like this.
//print(list[0].Obj.Title);

我在这里做错了什么?

1个回答

6

我已经更新了JsonObject github repo 以修复这个 bug。 我还添加了一个通过单元测试的测试用例,可以重现此bug。

您需要运行pub update以获取库的最新版本。

以下代码现在可以正常工作:

import 'package:json_object/json_object.dart';

void main() {
  var testJson = """
      [{"Dis":1111.1,"Flag":0,"Obj":{"ID":1,"Title":"Volvo 140"}},
      {"Dis":2222.2,"Flag":0,"Obj":{"ID":2,"Title":"Volvo 240"}}]""";
  MyList list = new MyList.fromString(testJson);
  //I want to be able to do something like this.
  print(list[0].Obj.Title);  // <- now prints "Volvo 140"
}

class MyList extends JsonObject implements List { 
  MyList();

  factory MyList.fromString(String jsonString) {
    return new JsonObject.fromJsonString(jsonString, new MyList());
  }
}

是否可以同时解析子元素,以便以下两个条件都成立? print(list[0] is MyResult); print(list[0].Obj is MyProduct); - 0tto
我怀疑不是这样的。树下的所有内容都是JsonObject,除了顶层类。我的待办事项列表中有一个基于反射的JsonObject,我希望它能涵盖这些情况(但不要等它出现 :) 你可以通过使用原始JSON解析器将传入的JSON转换为Map列表的方式来实现这一点,然后使用JsonObject.fromMap()构造函数将每个Map转换为JsonObject。 - Chris Buckett
好的,谢谢。只是想确认一下是否有我错过的简单方法。 - 0tto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接