rust - 缓冲串行输出和解析 JSON
问题描述
我是生锈的新手,正在努力解决一个问题。我正在寻找从串行读取输出并将其转换为 JSON。
下面是读取串行输出的代码部分。
match serialport::open(&port_name) {
Ok(mut port) => {
let mut serial_buf: Vec<u8> = vec![0; 1000];
loop {
match port.read(serial_buf.as_mut_slice()) {
Ok(t) => handle_event(&serial_buf[..t]),
Err(ref e) if e.kind() == io::ErrorKind::TimedOut => (),
Err(e) => print!("Port read error: {}\n", e),
};
}
}
Err(e) => {
println!("Failed to open \"{}\". Error: {}", port_name, e);
::std::process::exit(1);
}
};
接下来将该输出传递给 serde 进行解析。然而,它得到的输出并不总是完整的 JSON 字符串,因此 serde 会中断。我相信我需要在这里缓冲响应,但努力适应它。
fn handle_event(buf: &[u8]) {
let e_str = match str::from_utf8(buf) {
Ok(v) => v,
Err(e) => { print!("Str conversion error: {}\n", e); return; },
};
let e = match serde_json::from_str::<Event>(e_str) {
Ok(e) => e,
Err(e) => { print!("JSON parse error: {}\n", e); return; },
};
print!("{}", e.name);
}
提前感谢您的帮助。
解决方案
推荐阅读
- perl - 运行命令 Windows 10 时 Perl 一直闪烁
- json - 在 Python 中使用 json.dumps 将 JSON 字符串转换为 JSON 对象
- python - 将两个数据框合并在一起
- c++ - C++ 数据存储
- javascript - 在 Node 中使用 mySQL 导致 Async/Await 出现问题
- node.js - 如何使用节点从网站上抓取数据
- node.js - SyntaxError: Unexpected reserved word => prettier/third-party.js
- arrays - Dataweave:将正则表达式模式匹配到数组的每个元素
- vue.js - Vue-Router - 将数据从一个路由组件传递到另一个
- javascript - 为什么第二个 Javascript 函数返回 NaN?