Arrays Rust jsonrpc核心以映射或数组的形式访问参数

Arrays Rust jsonrpc核心以映射或数组的形式访问参数,arrays,dictionary,parameters,rust,json-rpc,Arrays,Dictionary,Parameters,Rust,Json Rpc,我通过查找实现了json rpc服务器 使用jsonrpc_核心::*; 使用jsonrpc_http_服务器::*; fn main(){ 让mut io=IoHandler::new(); io.add_方法(“say_hello”,|:Params|{ println!(“参数:{:?}”,参数); Ok(Value::String(“hello”.to_String())) }); 让_server=ServerBuilder::new(io) .start_http(&“127.0.0

我通过查找实现了json rpc服务器

使用jsonrpc_核心::*;
使用jsonrpc_http_服务器::*;
fn main(){
让mut io=IoHandler::new();
io.add_方法(“say_hello”,|:Params|{
println!(“参数:{:?}”,参数);
Ok(Value::String(“hello”.to_String()))
});
让_server=ServerBuilder::new(io)
.start_http(&“127.0.0.1:3030”.parse().unwrap())
.expect(“无法启动RPC服务器”);
_server.wait();
}
上述服务器正在按预期工作。这里参数采用向量或映射

对于请求
{“jsonrpc”:“2.0”,“方法”:“say_hello”,“参数”:{“a”:2,“b”:3},“id”:1}
它打印

参数:映射({“a”:数字(2),“b”:数字(3)})

对于请求
{“jsonrpc”:“2.0”,“方法”:“say_hello”,“params”:[2,3],“id”:1}
,它会打印出来

参数:数组([编号(42),编号(23)])

如何从该参数中访问这些参数作为映射或数组枚举

更新1

我修改了我的代码以获取参数作为映射-

io.add_方法(“say_hello”,|params:params|{
let map:HashMap=params.parse().unwrap();
println!(“参数:{:?}”,map);
Ok(Value::String(“hello”.to_String()))
});
它打印

参数:{“a”:数字(2),“b”:数字(3)}

更新2 修改通过键访问地图-

io.add_方法(“say_hello”,|params:params|{
let map:HashMap=params.parse().unwrap();
println!(“参数:{:?}”,map);
让var_a=map.get(&“a”);
设var_b=map.get(&“b”);
println!(“A:{:?},B:{:?}”,变量A,变量B);
Ok(Value::String(“hello”.to_String()))
});
现在我得到以下错误:

error[E0277]:特性绑定'std::string::string:
std::BROW::BROW`不满足-->src/main.rs:41:29
| 
41 |让var_a=map.get(&“a”);
|^^^特性'std::borrow::borrow'未为'std::string::string'实现
|
=帮助:找到了以下实现:

不知道你问“如何访问”的确切意思,但这里是:

使用jsonrpc_core::types::params::params;//jsonrpc core=“14.0.5”
使用serde_json;//serde_json=“1.0.44”
fn main()->结果{
设map=r#“{”a:2,“b:3}”#;
让param=serde_json::from_str::(map)?;
如果让Params::Map(m)=param{
println!(“总{}元素:,m.len());
对于k in m.keys(){
println!(“\t{}=>{:?}”,k,m.get(k));
}
}
设arr=r#“[2,3]”;
让param=serde_json::from_str::(arr)?;
如果让Params::Array(a)=param{
println!(“Totle{}元素:{:?}”,a.len(),a);
}
好(())
}
serde_json
部分与您关系不大。这只是获取
Params
值的一种方法。模式匹配后,
m
为a,
a
为规则。您可以根据它们的API任意操作它们。

通过“如何访问”我指的是通过索引(当数组时)或键(当映射时)访问参数。请检查我的更新,它给了我不同的错误。@Bopsi
map.get(“a”)
。回到最基本的问题上,阅读铁锈书会有所帮助。