idea_common/
json.rs

1use serde::{Deserialize, Serialize};
2
3// json 字符串 转为 数据对象
4pub fn json_to_struct<'a, T: Deserialize<'a>>(json_body: &'a str) -> Option<T> {
5    let json_struct_res:serde_json::error::Result<T> = serde_json::from_str(json_body);
6    match json_struct_res {
7        Ok(data) => { Some(data) }
8        Err(err) => {
9            log::error!("json.2.struct error {:?}\n{:?}", json_body, err);
10            None
11        }
12    }
13}
14pub fn json_to_struct_by<T: for<'a> Deserialize<'a>>(json_valve: &serde_json::Value) -> Option<T> {
15    let json_struct_res:serde_json::error::Result<T> = serde_json::from_value(json_valve.to_owned());
16    match json_struct_res {
17        Ok(data) => { Some(data) }
18        Err(err) => {
19            log::error!("json-value.2.struct error {:?}\n{:?}", json_valve, err);
20            None
21        }
22    }
23}
24pub fn json_to_json_value(json_body: &str) -> serde_json::Value {
25    serde_json::from_str(json_body).unwrap()
26}
27// struct转为json字符串
28pub fn struct_to_json_str<T: Serialize>(data: &T) -> String {
29    let result = serde_json::to_string(data);
30    match result {
31        Ok(json_str) => { json_str }
32        Err(err) => {
33            log::error!("struct.2.json error {:?}", err);
34            "{}".to_string()
35        }
36    }
37}
38
39
40// 两个对象转换
41pub fn copy_struct< F: Serialize, T: for<'a> Deserialize<'a>>(from: F) -> Option<T> {
42    let from_json = serde_json::to_string(&from).unwrap();
43    let json_de_result: serde_json::error::Result<T> = serde_json::from_str(&from_json);
44    match json_de_result {
45        Ok(data) => { Some(data) }
46        Err(err) => {
47            log::error!("json parse to struct error {:?} {:?}", &from_json, err);
48            None
49        }
50    }
51}
52
53
54/// 将serde_json::Map转换为std::collections::HashMap
55///
56/// # 参数
57/// * `map` - 需要转换的serde_json::Map对象
58///
59/// # 返回
60/// 返回一个新的HashMap,包含原Map中的所有键值对
61pub fn serde_json_map_to_hashmap(map: &serde_json::Map<String, serde_json::Value>) -> std::collections::HashMap<String, serde_json::Value> {
62    map.iter().map(|(k, v)| (k.clone(), v.clone())).collect()
63}