Flutter获取对象属性名称

8

我传递了以下对象:

var myVar = { typeA: { option1: "one", option2: "two" } }

我希望能够从上述结构中提取出类型为typeA的密钥。
这个值每次都可能发生变化,下一次可能是typeB。
因此,我想知道是否有任何方法可以实现这一点。

你到底想要什么结果?是 { option 1: "one", option2: "two" } 吗?你尝试过什么?问题出在哪里? - Günter Zöchbauer
我想要对象名称{ typeA: { option1: "one", option2: "two" } , typeB: { option1: "one", option2: "two" } ,typeC: { option1: "one", option2: "two" } }我想要TypeA和TypeB等等。 - nitishk72
抱歉,我仍然不知道问题是关于什么的。 - Günter Zöchbauer
https://api.github.com/users/nitishk72/gists我想从这个URL中获取文件名。返回的文件名是JSON对象键。该怎么办? - nitishk72
json[0]['files']['Sum_pointer_object.cpp']['filename'] - Günter Zöchbauer
实际上,我有超过10个Gist,我想要访问它们所有的文件名。 - nitishk72
3个回答

10

我能够使用“keys”解决问题。

对于像这样的json示例:

{
"1-0001": {
  "name": "red",
  "hex": "FF0000"
 },
"1-0002": {
  "name": "blue",
  "hex": "0000FF"
 },
"1-0003": {
  "name": "green",
  "hex": "008000"
 }
}

我能够使用

Map<String, dynamic> decoded = json.decode(jsonString);
for (var colour in decoded.keys) {
  print(colour);                   // prints 1-0001
  print(decoded[colour]['name']);  // prints red
  print(decoded[colour]['hex']);   // prints FF0000
}

参数类型“Map<String,Map<String,String>>”无法分配给参数类型“String” - ztvmark

5
要获取所有文件名,您可以使用:
var data = ...
 
var filenames = [];
for(var i = 0; i < data.length; i++) {
  var item = data[0]['files'];
  var key = item.keys.first;
  var filename = item[key]['filename'];
  filenames.add(filename);
}

print(filenames);

我已经使用Dart很长时间了。但是对于Flutter来说,我还是比较新手。 - Günter Zöchbauer

1
你需要定义一个数据类型。它基本上是一个(key value-pair)的映射,其中key根据问题类型A或类型B进行更改。此对象具有2个属性option1和option2,也是字符串。
以下是构建模型以及如何使用它的示例代码。
import 'package:TestDart/TestDart.dart' as TestDart;

main(List<String> arguments) {
  var  map = new Map<String, MyObject>();
  map['typeA'] = new MyObject("one", "two");
  map['typeB'] = new MyObject("one", "two");

  print(map['typeA'].toString());
  print(map['typeA'].toString());
}

class MyObject {
  String _option1;
  String _option2;

  MyObject(this._option1, this._option2);

  String get option2 => _option2;

  String get option1 => _option1;

  @override
  String toString() {
    return 'MyObject{option1: $_option1, option2: $_option2}';
  }


}

相关答案
 map.forEach((key, value) {
    print("Key : ${key} value ${value}");
  });

实际上,我想要的是键名。 我得到了正确的解决方案,但还是谢谢你的尝试。 - nitishk72
我已更新我的答案,使其更加精确并与问题的上下文相关,请查看。 - silentsudo
我会尝试,如果它有效,我一定会接受。 - nitishk72

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