如何仅访问 Map 中的值
How to access only the values from a Map
我有以下数据json数据。
{
"0": "traceroute to www.google.com ( 142.250.180.36 ), 30 hops max",
"1": "Hop Address Host Name Time ",
"2": "1 0.0.0.0 _gateway 3.03ms ",
"3": "2 0.0.0.0 0.0.0.0 5.28ms ",
"4": "3 0.0.0.0 0.0.0.0 7.63ms ",
"5": "4 0.0.0.0 00.0.0.0 9.65ms ",
"6": "5 172.19.14.121 172.19.14.121 10.55ms ",
"7": "6 58.181.114.10 58.181.114.10 29.9ms ",
"8": "7 10.253.4.74 10.253.4.74 31.0ms ",
"9": "8 10.253.4.26 10.253.4.26 148.22ms ",
"10": "9 74.125.146.188 74.125.146.188 43.09ms ",
"11": "10 ******************** ********************************************* 5179.56ms ",
"12": "11 142.251.51.56 142.251.51.56 45.78ms ",
"13": "12 108.170.247.23 108.170.247.23 43.23ms ",
"14": "13 209.85.240.55 209.85.240.55 48.81ms ",
"15": "14 209.85.241.249 209.85.241.249 42.3ms ",
"16": "15 ***************** ***************************************** 5024.85ms ",
"17": "16 142.250.180.36 mct01s14-in-f4.1e100.net 44.03ms ",
"18": "Reached destination"
}
我想在未来的构建器中根据键显示值。我的flutter代码如下:
Container(
child: FutureBuilder<Map<String, dynamic>>(
future: fetchData(),
builder: (context, snapshot) {
if (snapshot.hasData) {
return Expanded(
child: ListView.builder(
physics: AlwaysScrollableScrollPhysics(),
shrinkWrap: false,
itemCount: snapshot.data!.length,
itemBuilder: (BuildContext context, int index) {
return Container(
height: 50,
color: Colors.white,
child: Center(
child: Text(snapshot.data!.entries
.elementAt(index)
.toString()),
),
);
}),
);
} else if (snapshot.hasError) {
return Text("${snapshot.error}");
}
// By default show a loading spinner.
return CircularProgressIndicator();
},
),
),
我的 fetchData 函数是;
Future<Map<String, dynamic>> fetchData() async {
print("Fetch data is called");
Map<String, String> header = {
'Content-type': 'application/json',
'Accept': 'application/json',
"Access-Control-Allow-Headers": "Access-Control-Allow-Origin, Accept",
'Authorization': '<Your token>'
};
final response = await http.get(Uri.parse('http://192.168.100.9:7001/'),
headers: header);
if (response.statusCode == 200) {
var jsonResponse = json.decode(response.body);
return jsonResponse;
} else {
throw Exception('Unexpected error occured!');
}
}
我没有找到任何方法来访问我的 json 键在列表视图生成器中迭代它们的值。我找到的唯一方法是
snapshot.data!.entries
.elementAt(index)
.toString())
但这是在我只想要值的地方打印“MapEntry(key: value)”。
文本小部件中应该包含什么?
使用可以使用 .values
只读取值。
snapshot.data!.values.elementAt(index)
在 Dart Map<K,V>
中,您可以访问 keys
、values
和 entries
这三个都是 Iterable<T>
但 [=17= 的值] 各不相同。
- 键是
Iterable<K>
- 值为
Iterable<V>
- 条目是
Iterable<MapEntry<K,V>>
话虽如此,如果您想继续使用 .entries
,您还可以更新 Text
小部件以使用 snapshot.data!.entries.elementAt(index).value
补充阅读:
有关 Dart Map
的更多信息,请访问 docs
要了解有关 MapEntry
class 的更多信息,请访问此 doc
我有以下数据json数据。
{
"0": "traceroute to www.google.com ( 142.250.180.36 ), 30 hops max",
"1": "Hop Address Host Name Time ",
"2": "1 0.0.0.0 _gateway 3.03ms ",
"3": "2 0.0.0.0 0.0.0.0 5.28ms ",
"4": "3 0.0.0.0 0.0.0.0 7.63ms ",
"5": "4 0.0.0.0 00.0.0.0 9.65ms ",
"6": "5 172.19.14.121 172.19.14.121 10.55ms ",
"7": "6 58.181.114.10 58.181.114.10 29.9ms ",
"8": "7 10.253.4.74 10.253.4.74 31.0ms ",
"9": "8 10.253.4.26 10.253.4.26 148.22ms ",
"10": "9 74.125.146.188 74.125.146.188 43.09ms ",
"11": "10 ******************** ********************************************* 5179.56ms ",
"12": "11 142.251.51.56 142.251.51.56 45.78ms ",
"13": "12 108.170.247.23 108.170.247.23 43.23ms ",
"14": "13 209.85.240.55 209.85.240.55 48.81ms ",
"15": "14 209.85.241.249 209.85.241.249 42.3ms ",
"16": "15 ***************** ***************************************** 5024.85ms ",
"17": "16 142.250.180.36 mct01s14-in-f4.1e100.net 44.03ms ",
"18": "Reached destination"
}
我想在未来的构建器中根据键显示值。我的flutter代码如下:
Container(
child: FutureBuilder<Map<String, dynamic>>(
future: fetchData(),
builder: (context, snapshot) {
if (snapshot.hasData) {
return Expanded(
child: ListView.builder(
physics: AlwaysScrollableScrollPhysics(),
shrinkWrap: false,
itemCount: snapshot.data!.length,
itemBuilder: (BuildContext context, int index) {
return Container(
height: 50,
color: Colors.white,
child: Center(
child: Text(snapshot.data!.entries
.elementAt(index)
.toString()),
),
);
}),
);
} else if (snapshot.hasError) {
return Text("${snapshot.error}");
}
// By default show a loading spinner.
return CircularProgressIndicator();
},
),
),
我的 fetchData 函数是;
Future<Map<String, dynamic>> fetchData() async {
print("Fetch data is called");
Map<String, String> header = {
'Content-type': 'application/json',
'Accept': 'application/json',
"Access-Control-Allow-Headers": "Access-Control-Allow-Origin, Accept",
'Authorization': '<Your token>'
};
final response = await http.get(Uri.parse('http://192.168.100.9:7001/'),
headers: header);
if (response.statusCode == 200) {
var jsonResponse = json.decode(response.body);
return jsonResponse;
} else {
throw Exception('Unexpected error occured!');
}
}
我没有找到任何方法来访问我的 json 键在列表视图生成器中迭代它们的值。我找到的唯一方法是
snapshot.data!.entries
.elementAt(index)
.toString())
但这是在我只想要值的地方打印“MapEntry(key: value)”。 文本小部件中应该包含什么?
使用可以使用 .values
只读取值。
snapshot.data!.values.elementAt(index)
在 Dart Map<K,V>
中,您可以访问 keys
、values
和 entries
这三个都是 Iterable<T>
但 [=17= 的值] 各不相同。
- 键是
Iterable<K>
- 值为
Iterable<V>
- 条目是
Iterable<MapEntry<K,V>>
话虽如此,如果您想继续使用 .entries
,您还可以更新 Text
小部件以使用 snapshot.data!.entries.elementAt(index).value
补充阅读:
有关 Dart Map
的更多信息,请访问 docs
要了解有关 MapEntry
class 的更多信息,请访问此 doc