簡體   English   中英

如何在 Dart 中將 Class 對象轉換為數據結構“Map”或“List of Maps”?

[英]How to convert Class object to data structure `Map` or a `List of Maps` in Dart?

如何在Dart中將Object類型轉換為MapList of Maps ,使變量成為鍵/值對

根據我的經驗,dart 還沒有提供那種系統。 所以,基本上我們創建了像toMap()這樣的函數,手動將對象轉換為映射的鍵值對。

例如:

class Human {
  String name;
  int age;

  Map<String, dynamic> toMap() {
    return {
      'name': name,
      'age': age,
    };
  }
}

因此,稍后當您擁有Human對象時,您只需調用human.tomap()

我在大多數實體類中都這樣做。

這是一種更簡單且不易出錯的方法,(如果您已經將這些類用作需要序列化的 DTO 對象,這是雙贏)。

在 pubsec.yaml 中添加以下 3 個依賴項

dependencies:
  flutter:
    sdk: flutter
  json_annotation:^3.1.1

dev_dependencies:
  flutter_test:
    sdk: flutter
  build_runner: ^1.10.11
  json_serializable: ^3.2.5

在您想要獲取 Map 的類中,執行以下操作。

part 'person.g.dart';

@JsonSerializable(explicitToJson: true)
class Person{
String name;
String surname;
Person(this.name,this.surname);

//make sure you have the (Just change part of the method name to your class name)

 factory Person.fromJson(Map<String, dynamic> json) =>
      _$PersonFromJson(json);

  Map<String, dynamic> toJson() => _$PersonToJson(this);//Replace 'Person' with your class name


}

就是這樣,然后您只需要在終端中運行以下命令,flutter 就可以為您生成“toMap()”方法。

flutter pub run build_runner build --delete-conflicting-outputs

然后像這樣使用它。

var person =Person('somename','some surname');//This is object
Map personMap =person.toJson();

以。 這是一種更好的方法,特別是如果您有包含多個對象的復雜對象。 只需確保每個嵌套對象也包含這些更改(JsonSerializable 注釋、'part 'class.g.dart'' 和 2 個方法)

注意:如果對類進行了屬性更改,只需再次運行此命令。

flutter pub run build_runner build --delete-conflicting-outputs
import 'package:queries/collections.dart';
import 'package:queries/queries.dart';

void main() {
  var c = Collection(getPersons());
  var q = c.select((p) => {'age': p.age, 'name': p.name});
  print(q.toList());
}

List<Person> getPersons() {
  return Enumerable.range(20, 3)
      .select$1((e, i) => Person(age: 20 + i, name: 'Person ${i}'))
      .toList();
}

class Person {
  int age;
  String name;
  Person({this.age, this.name});
}

結果(地圖列表):

[{age: 20, name: Person 0}, {age: 21, name: Person 1}, {age: 22, name: Person 2}]

你可以看看這個包class_to_map

import 'package:class_to_map/class_to_map.dart';
class Test {
  String val1 = "value 1";
  int val2 = 2;
  Map val3 = {"a": "another value"};
}
print(Test().toMap());

// converting map to class
{"val1": 'value 1', "val2": 2, "val3": {"a": "another value"} }.toClass<Test>();

你可以試試這個:

var data = {
  "key1": "value1",
  "key2": "value2",
  "key3": "value3",
};

var myMap = Map<String, dynamic>.from(data);
print(myMap);

使用 Map<String, dynamic > 中的dynamic ,我們可以擁有任何類型的地圖的值。 在上面的例子中,它是字符串。

var keyValuePair = {'name' : Object.name, 'surname':Object.surname};

這會給你一個 Map 對象。

var listOfMaps = List<Map<String, dynamic>>();
listOfMaps.Add({'name' : Object.name, 'surname':Object.surname});

這會給你一個地圖列表

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM