Websocket JSON解析类型不匹配

Websocket JSON解析类型不匹配,json,websocket,rust,serde,Json,Websocket,Rust,Serde,我正在尝试使用解析JSON的tungstenite破解一个简单的WebSocket客户端。大部分代码都来自 如果我做了println!(“{}”,msg)它工作正常,所以我不确定为什么类型不匹配(msg应该是字符串对吗?) 错误[E0308]:类型不匹配 -->src/main.rs:12:62 | 12 | let parsed:serde_json::Value=serde_json::from_str(&msg); |^^^^应为'str',找到枚举'tungstenite::protoc

我正在尝试使用解析JSON的tungstenite破解一个简单的WebSocket客户端。大部分代码都来自

如果我做了
println!(“{}”,msg)
它工作正常,所以我不确定为什么类型不匹配(
msg
应该是字符串对吗?)

错误[E0308]:类型不匹配
-->src/main.rs:12:62
|
12 | let parsed:serde_json::Value=serde_json::from_str(&msg);
|^^^^应为'str',找到枚举'tungstenite::protocol::message::message`
|
=注意:应为引用“%str”`
找到引用`&tungstenite::protocol::message::message`

类似这样的方法会奏效:

使用钨矿:{connect};
使用url::url;
使用serde_json;
fn main(){
let(多套接字,_响应)=
连接(Url::解析(“wss://www.bitmex.com/realtime?subscribe=trade:XBTUSD“”。展开()).expect(“无法连接”);
环路{
让msg=socket.read_message().expect(“错误读取消息”);
让msg=匹配msg{
tungstenite::Message::Text=>{s}
_=>{panic!()}
};
让已解析:serde_json::Value=serde_json::from_str(&msg).expect(“无法解析为json”);
println!(“{:?}”,解析[“数据”][0][“价格”]);
}
}

msg应该是一个字符串-您可以
println!(“{}”,msg)
因为实现了
显示
。请参阅有关如何将其转换为字符串的文档。这很有效!我试着从这里把文本转换成文本,知道为什么不行吗?无论如何,谢谢!
use tungstenite::{connect};
use url::Url;
use serde_json;

fn main() {

    let (mut socket, _response) =
        connect(Url::parse("wss://www.bitmex.com/realtime?subscribe=trade:XBTUSD").unwrap()).expect("Can't connect");

    loop {
        let msg = socket.read_message().expect("Error reading message");
        let parsed: serde_json::Value = serde_json::from_str(&msg).expect("Can't parse to JSON");
        println!("{:?}", parsed["data"][0]["price"]);
    }

}
[dependencies]
tungstenite = "0.10.1"
url = "2.1.1"
serde_json = "1.0.53"