我有一个网址是这样的:
http%3A%2F%2Fexample.com%3Fa%3D1%26b%3D2%26c%3D3
我用hyper::Url::parse
解析它并获取查询字符串:
let parsed_url = hyper::Url::parse(&u).unwrap();
let query_string = parsed_url.query();
但是它给我的查询是一个字符串,我想得到的查询字符串是HashMap
,就像这样:
// some code to convert query string to HashMap
hash_query.get(&"a"); // eq to 1
hash_query.get(&"b"); // eq to 2
3条答案
按热度按时间rekjcdws1#
其中涉及几个步骤:
.query_pairs()
方法将为您提供一个Cow<str>
对的迭代器。.into_owned()
将给予一个String
对上的迭代器。(String, String)
的迭代器,它正好是.collect()
到HashMap<String, String>
的正确形状。把它们放在一起:
请注意,您需要在
hash_query
上添加类型注解-因为.collect()
是重载的,所以您必须告诉编译器您需要哪种集合类型。如果您需要处理重复的密钥,请尝试使用
multimap
crate:qzwqbdag2#
另一个答案是好的,但我觉得这是应该更直接的东西,所以我把它 Package 在一个函数中:
或者,我找到了另一个板条箱,可以做到这一点:
https://docs.rs/auris
a7qyws3x3#
下面是一个解决方案,用于将已经解码的查询字符串从
&str
解析为HashMap<String, String>
,* 仅 * 使用Rust标准库,而不需要外部crate: