#json-path #string #access #nested #string-format #structures #would

nestac

使用类似路径的字符串格式访问嵌套结构的库

4 个版本 (2 个破坏性更新)

0.3.1 2024年7月6日
0.3.0 2024年6月8日
0.2.0 2024年6月6日
0.1.0 2024年6月4日

#998编码

Download history 229/week @ 2024-05-31 195/week @ 2024-06-07 10/week @ 2024-06-14 2/week @ 2024-06-21 119/week @ 2024-07-05 5/week @ 2024-07-12 46/week @ 2024-07-26 5/week @ 2024-08-02

每月58次下载

MIT 许可证

15KB
233

nestac

(缩写为(ne)sted (st)ructure (ac)cess) 是一个库,用于使用类似路径的字符串格式访问嵌套结构。

如果您使用 Python,您可能熟悉 glom,灵感就来自那里。

编写 Rust 实现的必要性来自于一个最初用 Python 开发的项目,该项目需要遍历 .json 文件并使用 glom 更新它们的属性。

一旦工作量增加到 1k+ 输入,Python 脚本开始出现性能问题。这导致决定用 Rust 重写应用程序,但仍然需要支持路径字符串以进行属性更新。

所以我们就在这里。

安装

  • cargoadd nestac

  • cargoadd --githttps://github.com/mitternacht92/nestac

用法

  • 读取嵌套 JSON 值
use serde_json::Value;
use nestac::json_read;

fn main() {
    let key_path = "foo.bar";
    let json_str = r#"{"foo": {"bar": "bingo!"}}"#;
    let json_data: Value = serde_json::from_str(json_str).unwrap();
    let val: Option<&Value> = json_read(key_path, &json_data);
    assert_eq!(val.unwrap(), "bingo!");
}
  • 更新嵌套 JSON 值
use serde_json::Value;
use nestac::json_read;

fn main() {
    let json_str = r#"{"foo": {"bar": "bingo!"}}"#;

    let mut json_data: Result<Value> = serde_json::from_str(json_str);
    assert_eq!(json_data.is_ok(), true);

    let old_val = json_update(
        json_data.as_mut().unwrap(),
        "foo.bar",
        Value::String("updated!".into())
    );

    assert_eq!(old_val.is_none(), false);
    assert_eq!(old_val.unwrap(), "bingo!");

    let new_val: Option<&Value> = json_read(
        "foo.bar",
        json_data.as_ref().unwrap()
    );

    assert_eq!(new_val.is_none(), false);
    assert_eq!(new_val.unwrap(), "updated!");
}

支持的结构

  • json

许可证

MIT 许可证 (MIT)

版权所有 © 2024 Ramon Moraes [email protected]

特此授予任何获得本软件及其相关文档副本(以下简称“软件”)的人免费使用权,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本的权利,并允许获得软件的人使用本软件,但须遵守以下条件

上述版权声明和本许可声明应包含在本软件的任何副本或主要部分中。

本软件按“原样”提供,不包括任何明示或暗示的保证,包括但不限于适销性、特定用途的适用性和非侵权性。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论该索赔、损害或其他责任是基于合同、侵权或其他方式,无论该索赔、损害或其他责任是否与软件或其使用或其它交易有关。

依赖项

~2.5–4MB
~73K SLoC