【发布时间】:2019-02-17 13:53:05
【问题描述】:
我正在尝试创建一个网络服务器,它接受一些 JSON 参数,并将它们转换为一个结构,然后我将其存储在我的应用程序的其他位置。
我在一个名为 status.rs 的文件中有这个数据结构:
use serde::{Serialize, Deserialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Status {
pub id: String,
pub rssi: Option<i8>,
pub carrier: Option<String>,
pub timestamp: u64,
}
然后我在 Hyper 的服务中使用以下代码来尝试解析请求的主体并将其转换为我的结构。唯一的区别是我要在服务器上根据时间戳添加时间戳字段,而不是在客户端:
let timestamp: u64 = SystemTime::now()
.duration_since(UNIX_EPOCH)
.expect("PANIC! Time is running backwards!")
.as_secs();
Box::new(req.into_body().concat2().map(|body| {
let body_bytes = body.into_bytes();
let body_str = match str::from_utf8(&body_bytes) {
Ok(v) => v,
Err(e) => {
// TODO: this is shitty error handling
panic!("Unable to read UTF8 input: {}", e);
}
};
let input_data: Value = serde_json::from_str(body_str).unwrap();
let data = Status {
id: input_data.get("id").unwrap(),
timestamp: timestamp,
rssi: input_data.get("rssi"),
carrier: input_data.get("carrier"),
};
update(data);
}));
更新函数只是将它插入到数据存储结构中。
我尝试了几种不同的方法,但这种方法给我的问题是这些字段中的每一个都是Option<&Value> 类型(我认为)。
希望我想要达到的结果足够清晰,我只是不知道如何获取请求正文、解析 JSON、添加时间戳并将其打包到一个结构中,然后将其存储在我的数据库。
我该怎么办?
【问题讨论】:
-
有什么问题?
-
我想从请求正文中解析JSON,添加一个字段,然后将其解析为
Status结构,我不太清楚如何去做。 -
你搞清楚了吗?
-
@JustinThomas:我没有 :(