Websocket JSON 解析类型不匹配
Websocket JSON parsing type mismatch
我正在尝试使用解析 JSON 的钨矿来组装一个简单的 WebSocket 客户端。大部分代码来自this example.
如果我这样做 println!("{}", msg)
它工作正常,所以我不确定为什么类型不匹配(msg
应该是一个字符串吧?)。 https://docs.rs/tungstenite/0.6.1/tungstenite/protocol/enum.Message.html
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"]);
}
}
error[E0308]: mismatched types
--> src/main.rs:12:62
|
12 | let parsed: serde_json::Value = serde_json::from_str(&msg).expect("Can't parse to JSON");
| ^^^^ expected `str`, found enum `tungstenite::protocol::message::Message`
|
= note: expected reference `&str`
found reference `&tungstenite::protocol::message::Message`
[dependencies]
tungstenite = "0.10.1"
url = "2.1.1"
serde_json = "1.0.53"
像这样的东西会起作用:
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 msg = match msg {
tungstenite::Message::Text(s) => { s }
_ => { panic!() }
};
let parsed: serde_json::Value = serde_json::from_str(&msg).expect("Can't parse to JSON");
println!("{:?}", parsed["data"][0]["price"]);
}
}
我正在尝试使用解析 JSON 的钨矿来组装一个简单的 WebSocket 客户端。大部分代码来自this example.
如果我这样做 println!("{}", msg)
它工作正常,所以我不确定为什么类型不匹配(msg
应该是一个字符串吧?)。 https://docs.rs/tungstenite/0.6.1/tungstenite/protocol/enum.Message.html
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"]);
}
}
error[E0308]: mismatched types
--> src/main.rs:12:62
|
12 | let parsed: serde_json::Value = serde_json::from_str(&msg).expect("Can't parse to JSON");
| ^^^^ expected `str`, found enum `tungstenite::protocol::message::Message`
|
= note: expected reference `&str`
found reference `&tungstenite::protocol::message::Message`
[dependencies]
tungstenite = "0.10.1"
url = "2.1.1"
serde_json = "1.0.53"
像这样的东西会起作用:
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 msg = match msg {
tungstenite::Message::Text(s) => { s }
_ => { panic!() }
};
let parsed: serde_json::Value = serde_json::from_str(&msg).expect("Can't parse to JSON");
println!("{:?}", parsed["data"][0]["price"]);
}
}