TreeMap <string,string =“”>到json </string,>

时间:2014-12-04 03:19:50

标签: json rust

我有以下代码:

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>,但失败了。我怎么能这样做?

1 个答案:

答案 0 :(得分:2)

传递给map的闭包有两个参数,但它应该采用一个元组类型的参数,因为iter()返回一个迭代器而不是元组(参见Trait Implementations on Entries)。将|k, v|更改为|(k, v)|以解决此问题。 (我通过在kv上添加显式类型注释来发现这一点:然后编译器抱怨关闭没有正确数量的参数。)

但是还有一些其他错误。如果您不再需要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);
}