#json-parser #json-path #json-query #low-level #tags #access #node

plainjson

该库简单地提供低级访问和JSONPath方式来查询或设置JSON值

3个版本

0.1.2 2022年4月12日
0.1.1 2021年6月15日
0.1.0 2021年6月15日

#2830 in 解析器实现

MIT 许可证

68KB
1.5K SLoC

plainjson

该库简单地提供

  • JsonTag:一个低级JSON标签解析器,它从实现了trait std::io::Read的实例中读取JSON标签
  • JsonNode:一个JSON解析器,支持通过JSONPath从选定的JSON节点获取或设置值

注意:JSONPath中的过滤器表达式尚未实现,因此目前不支持过滤器表达式。

通过JSONPath获取值的方式如下

use plainjson::JsonNode;
fn get_value_by_json_path() {
    let json = r#"{"a": 123, "b": {"c": "hello"}}"#;
    let mut json = JsonNode::parse_single_node(json.as_bytes()).unwrap();
    let c = json.get_str("$.b.c").unwrap();
    assert_eq!(c, Some(String::from("hello")));
}

通过JSONPath设置值的方式如下

use plainjson::JsonNode;
fn set_value_by_json_path() {
    let json = r#"{"a": 123, "b": [3, 2, 1]}"#;
    let mut json = JsonNode::parse_single_node(json.as_bytes()).unwrap();
    json.set_bool("$.b[1]", true).unwrap();
    assert_eq!(json.to_string(), r#"{"a": 123, "b": [3, true, 1]}"#)
}

如果您需要访问低级JSON标签,请使用JsonTag

use plainjson::JsonTag;
fn fix_json() {
    let json = r#"{"a": test, "b": "world"}"#;
    let mut tags = JsonTag::parse(json.as_bytes()).unwrap();
    tags[3] = JsonTag::Literal(String::from(r#""test""#));
    assert_eq!(JsonTag::to_string(&tags), r#"{"a": "test", "b": "world"}"#);
}

该库遵循MIT许可证

依赖项

~775KB
~12K SLoC