3个版本
0.1.2 | 2022年4月12日 |
---|---|
0.1.1 | 2021年6月15日 |
0.1.0 | 2021年6月15日 |
#2830 in 解析器实现
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