首页 > 解决方案 > 如何将 json 数组解析为 dart 中的列表?

问题描述

至于下面的脚本,我有两个不同的 json 用于单个记录和多个记录作为列表。Person我可以使用该类解析单个数据。对于带有列表的 json,我正在使用该类,但由于不再需要PersonListjson 键而出现错误。result有没有办法在不更改Person类的情况下解析列表?还是我不应该使用PersonList该类而只创建一个List<Person>

我看到了这个例子,但它只有在 json 是这样的整个列表时才有效

var jsonResponse = convert.jsonDecode(rawJsonMulti) as List;
    return jsonResponse.map((p) => Person.fromJson(p).toList();

你能告诉我如何使用我的json来使用上面的脚本吗?谢谢。

import 'dart:convert';
void main() {

  String rawJsonMulti = '{"result": [{"name":"Mary","age":30},{"name":"John","age":25}]}';
  String rawJsonSingle = '{"result": {"name":"Mary","age":30}}';
  
// Working for non list json  
//   final result = json.decode(rawJsonSingle);
//   var obj = Person.fromJson(result);
//   print(obj.name);

  
  final result = json.decode(rawJsonMulti);
  var obj = PersonList.fromJson(result);
  print(obj.listOfPerson[0].name);

}


  class PersonList {
  final List<Person> listOfPerson;

  PersonList({this.listOfPerson});

  factory PersonList.fromJson(Map<String, dynamic> json) {
    var personFromJson = json['result'] as List;

    List<Person> lst =
        personFromJson.map((i) => Person.fromJson(i)).toList();

    return PersonList(listOfPerson: lst);
  }
}


  class Person {
    String name;
    int age;
    
    //will only work on result is not a list
    Person({this.name, this.age});
    factory Person.fromJson(Map<String, dynamic> json) {
      return Person(name: json['result']['name'],
                   age: json['result']['age']);
    }

//  This will work on json with list but not in single
//  factory Person.fromJson(Map<String, dynamic> json) {
//       return Person(name: json['name'],
//                    age: json['age']);
//     }
    

  }

标签: jsondart

解决方案


如果将 转换dynamic为 a List<dynamic>,则可以映射 jsonDecoded 列表中的每个元素。

例子:

import 'dart:convert';

final decodedJson = jsonDecode(rawJsonMulti) as List<dynamic>;
final personList = decodedJson
    .map((e) => Person.fromJson(
        e as Map<String, dynamic>))
    .toList();

return PersonList(listOfPerson: personList);
```

推荐阅读