#json #序列化 #基础

rusty_json

为 Rust 提供基本 JSON 功能、序列化和操作的轻量级且直观的 JSON 库

5 个稳定版本

2.0.5 2024年7月29日
2.0.3 2024年7月27日
1.2.2 2024年6月26日
1.0.0 2024年5月29日

#11#基础

Download history 120/week @ 2024-05-27 9/week @ 2024-06-03 5/week @ 2024-06-10 307/week @ 2024-06-24 21/week @ 2024-07-01 215/week @ 2024-07-15 107/week @ 2024-07-22 393/week @ 2024-07-29

725 每月下载量
用于 hconfig

MIT 许可证

69KB
1.5K SLoC

Rusty Json

为 Rust 提供基本 JSON 功能、序列化和操作的轻量级且直观的 JSON 库。

注意:如果您需要一个高度优化且广泛使用的 JSON 包,请考虑使用 serde_json。虽然 Rusty Json 设计得简单且轻量级,但它仍然处于早期阶段,可能不如 serde_json 那样高效或功能丰富。

用法

基础

  • JSON 对象
let mut json_obj = JsonObject::new();
json_obj.set("Name", "Ammar Dev");
json_obj.set("msg", "Github");
json_obj.set("number", 234);

println!("{}", json_obj);
{"msg": "Github", "Name": "Ammar Dev", "number": 234}
  • JSON 数组
let mut json_arr = JsonArray::new();
json_arr.push("Value 1");
json_arr.push(324);
json_arr.push(vec![1, 2]);

println!("{}", json_arr);
["Value 1", 324, [1, 2]]

或者

let mut json_arr: JsonArray = vec![1, 2].into();
json_arr.push("Value 1");
json_arr.push("Value 2");

println!("{}", json_arr);
[1, 2, "Value 1", "Value 2"]
  • JSON 值
fn main() -> Result<(), Box<dyn Error>> {
    // Creating JSON values of different types
    let string_value = JsonValue::String("Hello".to_string());
    let number_value_1 = JsonValue::Number(3453f64);
    let number_value_2 = JsonValue::Number(4234001f64);
    let bool_value = JsonValue::Boolean(false);
    let null_value = JsonValue::Null;
    let object_value = JsonValue::Object(JsonObject::new());
    let array_value = JsonValue::Array(JsonArray::new());

    // Parsing the JSON values into Rust types
    let parsed_string: String = string_value.parse()?;
    let parsed_number_1: f64 = number_value_1.parse()?;
    let parsed_number_2: i32 = number_value_2.parse()?;
    let parsed_bool: bool = bool_value.parse()?;

    // Printing the parsed values
    println!("Parsed String: {}", parsed_string);
    println!("Parsed Number 1: {}", parsed_number_1);
    println!("Parsed Number 2: {}", parsed_number_2);
    println!("Parsed Bool: {}", parsed_bool);

    // Indicating that the main function completed successfully
    Ok(())
}

额外功能

  • 解析器
let raw_json = r#"
    {
        "name": "Ammar Dev",
        "age": 99,
        "email": "[email protected]",
        "isEmployed": true
    }
"#;

let json_val = JsonParser::parse(raw_json).unwrap(); // Parsed into JsonValue
let mut json_obj = JsonObject::from(json_val); // Cast into Json Object
json_obj.set("isEmployed", false);
println!("{}", json_obj);
{"name": "Ammar Dev", "age": 99, "email": "[email protected]", "isEmployed": false}
  • 格式化器
let mut json_obj = JsonObject::new();
json_obj.set("name", "Ammar Dev");
json_obj.set("age", 99);

let mut json_arr = JsonArray::from(vec![1, 2]);
json_arr.push("Hi");
json_arr.push("Hello");

json_obj.set("list_example", json_arr);

let formatter = JsonFormatter::default();
println!("{}", formatter.format(json_obj));
{
  "name": "Ammar Dev",
  "age": 99,
  "list_example": [
    1,
    2,
    "Hi",
    "Hello"
  ]
}
  • 宏定义
let json_obj = json!({
    name: "Ammar Dev",
    Age: 99
}); // will produce JsonObject

let json_arr = json!([
    1,
    2,
    "String 1",
    "String 2"
]); // will produce JsonArray

let json_val = json!("Hello"); // will Produce JsonValue

实现

  • JSON 实体(手动)[需要: 序列化特性]
#[derive(Clone)]
struct User {
    name: String,
    age: i32,
}

impl JsonEntity for User {
    fn to_json(&self) -> JsonValue {
        let mut obj = JsonObject::new();
        obj.set("name", &self.name);
        obj.set("age", &self.age);
        JsonValue::Object(obj)
    }

    fn from_json(raw: &str) -> Result<Self, ConversationError> {
        let parsed = JsonParser::parse(raw)?;
        if let JsonValue::Object(obj) = parsed {
            let name = obj.get("name").ok_or_else(|| ConversationError::GenericError("Missing 'name'".to_string()))?
                .parse::<String>()?;
            let age = obj.get("age").ok_or_else(|| ConversationError::GenericError("Missing 'age'".to_string()))?
                .parse::<i32>()?;
            Ok(User { name, age })
        } else {
            Err(ConversationError::GenericError("Expected JSON object".to_string()))
        }
    }
}

fn main() -> Result<(), Box<dyn Error>> {
    let user = User {
        name: "Ammar Dev".to_string(),
        age: 22,
    };

    let json = user.to_json();
    println!("{}", json);

    let json_str = json.to_string(); // Assuming to_string() is implemented
    let parsed_user = User::from_json(&json_str)?;

    println!("{}", parsed_user.to_json());

    Ok(())
}
{"name": "Ammar Dev", "age": 22}
  • JSON 实体(自动)
#[derive(JsonEntity, Clone, Debug)] // Derive JsonEntity for automatic serialization and deserialization
struct User {
    name: String,
    age: i32,
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // Create an instance of User
    let user = User {
        name: "Ammar Dev".to_string(),
        age: 22,
    };

    // Serialize User to JSON and print it
    println!("Serialized JSON:\n{}", user.to_json());

    // Example JSON string for deserialization
    let json_str = r#"{"name": "Ammar Dev", "age": 22}"#;

    // Deserialize JSON back to User
    let deserialized_user: User = User::from_json(json_str)?;

    // Print deserialized User
    println!("Deserialized User: {:?}", deserialized_user);

    Ok(())
}
{"name": "Ammar Dev", "age": 22}

版权

Ammar Dev 保留所有权利
本项目采用 MIT 许可证

依赖

~1.8–2.7MB
~50K SLoC