我有以下代码:
extern crate serialize;
use std::collections::TreeMap;
use serialize::json;
use serialize::json::ToJson;
use serialize::json::Json;
fn main() {
let mut tree_map = get_tree_map(); // : TreeMap<String, String>
let mut tree_map2 = tree_map.iter().map(|k, v| (k, v.to_json())); //error the type of this value must be known in this context
let json1 = json::Object(tree_map2);
}
我想将tree_map
转换为json。我尝试将其转换为TreeMap<String, Json>
,但失败了。我怎么能这样做?
答案 0 :(得分:2)
传递给map
的闭包有两个参数,但它应该采用一个元组类型的参数,因为iter()
返回一个迭代器而不是元组(参见Trait Implementations on Entries)。将|k, v|
更改为|(k, v)|
以解决此问题。 (我通过在k
,v
上添加显式类型注释来发现这一点:然后编译器抱怨关闭没有正确数量的参数。)
但是还有一些其他错误。如果您不再需要iter()
,则可以使用into_iter()
来避免克隆String
,而不是使用TreeMap<String, String>
。此外,您应在.collect()
之后添加.map(...)
以将迭代器转换为TreeMap
。编译器将根据tree_map2
的要求自动推断json::Object
的类型。
fn main() {
let mut tree_map = get_tree_map(); // : TreeMap<String, String>
let mut tree_map2 = tree_map.into_iter().map(|(k, v)| (k, v.to_json())).collect();
let json1 = Json::Object(tree_map2);
}