Rust 缓冲串行输出和解析JSON

Rust 缓冲串行输出和解析JSON,rust,serde,Rust,Serde,我是一个新的生锈和挣扎的问题。我希望从串口读取输出并将其转换为JSON 下面是读取串行输出的代码部分 match serialport::open(&port\u name){ 正常(多端口)=>{ 让mut serial_buf:Vec=Vec![0;1000]; 环路{ 匹配端口读取(串行总线作为多片){ Ok(t)=>处理事件(&serial_buf[…t]), 如果e.kind()==io::ErrorKind::TimedOut=>(),则为Err(参考e), Err(e)=>prin

我是一个新的生锈和挣扎的问题。我希望从串口读取输出并将其转换为JSON

下面是读取串行输出的代码部分

match serialport::open(&port\u name){
正常(多端口)=>{
让mut serial_buf:Vec=Vec![0;1000];
环路{
匹配端口读取(串行总线作为多片){
Ok(t)=>处理事件(&serial_buf[…t]),
如果e.kind()==io::ErrorKind::TimedOut=>(),则为Err(参考e),
Err(e)=>print!(“端口读取错误:{}\n”,e),
};
}
}
错误(e)=>{
println!(“打开\“{}\”失败。错误:{}”,端口名称,e);
::std::process::exit(1);
}
};
接下来,将该输出传递给serde进行解析。但是,它得到的输出并不总是完整的JSON字符串,因此serde会中断。我相信我需要缓冲一下这里的反应,但努力适应这一点

fn handle_事件(buf:&u8){
让e_str=match str::from_utf8(buf){
Ok(v)=>v,
Err(e)=>{print!(“Str转换错误:{}\n”,e);return;},
};
让e=match serde_json::from_str::(e_str){
好的(e)=>e,
Err(e)=>{print!(“JSON解析错误:{}\n”,e);return;},
};
打印!(“{}”,即姓名);
}

提前感谢您的帮助。

请您提供事件的定义,可能还有一个示例数据。这应该会有帮助:最简单的方法可能是插入分隔符。换行符(如果可以确保json被缩小)或者空字节。然后可以缓冲数据,直到出现分隔符。顺便说一句,JSON可能不是这种类型应用程序的正确格式。请考虑使用固定长度消息序列,或者内置非明确的EOF分隔符的编码。请您将事件定义和可能的示例数据包括在内。这将有助于:可能最简单的方法是插入定界符。换行符(如果可以确保json被缩小)或者空字节。然后可以缓冲数据,直到出现分隔符。顺便说一句,JSON可能不是这种类型应用程序的正确格式。而是考虑使用固定长度消息序列,或者使用内置明确的EOF分隔符的编码。