4 个版本 (2 个重大更改)
0.3.0 | 2022 年 9 月 19 日 |
---|---|
0.2.0 | 2022 年 9 月 8 日 |
0.1.3 | 2022 年 9 月 7 日 |
#1315 in 编码
15KB
142 行
json-commons
Rust 中的一组 JSON 常用工具。
免责声明
功能
-
read_str
- 从字符串返回一个
json::JsonValue
- 从字符串返回一个
-
read_file
- 从文件返回一个
json::JsonValue
- 从文件返回一个
-
path_exists
- 如果点路径存在则返回一个
bool
- 如果点路径存在则返回一个
-
get_path
- 返回一个
Option<json::JsonValue>
- 返回一个
-
parse_to_vec
- 将一个
json::JsonValue
数组作为Vec<json::JsonValue>
返回
- 将一个
-
serialize
- 返回一个 JSON 字符串,类似于 JavaScript 的 "JSON.stringify"
-
serialize_to_bson_hex
- 返回一个代表 BSON 的十六进制字符串
-
json_from_bson_hex
- 从一个十六进制字符串返回一个
json::JsonValue
- 从一个十六进制字符串返回一个
-
parse_to_document
- 从一个
json::JsonValue
返回一个bson::Document
- 从一个
-
json_from_document
- 从一个
bson::Document
返回一个json::JsonValue
- 从一个
-
parse_to_bson
- 从一个
json::JsonValue
返回一个bson::Bson
- 从一个
-
json_from_bson
- 从一个
bson::Bson
返回一个json::JsonValue
- 从一个
用法
use json_commons::JsonCommons;
fn main() {
let jsonc = JsonCommons::new();
}
解析功能
解析功能允许读取JSON内容,但失败时会发生恐慌错误
读取JSON字符串
let content = "{\"car\": {\"model\": \"Gurgel Itaipu E400\", \"color\": \"red\"}}";
let json = jsonc.read_str(content);
读取JSON文件
let path = "/user/docs/myfile.json";
let json = jsonc.read_file(path);
点路径功能
以下示例使用此JSON内容
{
"car": {
"model": "Gurgel Itaipu E400",
"color": "red"
}
}
路径存在
您可以检查路径是否存在
let json = jsonc.read_str(content);
jsonc.path_exists("car", json); // The output is True
jsonc.path_exists("car.model", json); // The output is True
jsonc.path_exists("car.name", json); // The output is False
jsonc.path_exists("person", json); // The output is False
获取路径
您可以获取任何路径作为可选项
let json = jsonc.read_str(content);
jsonc.get_path("car", json); // The output is Ok, containing a JsonValue
jsonc.get_path("car.model", json); // The output is Ok, containing a JsonValue
jsonc.get_path("car.name", json); // The output is None
jsonc.get_path("person", json); // The output is None
点路径与列表
您可以通过索引访问来获取子元素,请参见此示例
{
"car": {
"model": "Gurgel Itaipu E400",
"variants": [
{
"fuel": "gasoline",
"color": "yellow"
},
{
"fuel": "eletric",
"color": "red"
}
]
}
}
let json = jsonc.read_str(content);
jsonc.get_path("car.variants", json); // The output is Ok, containing a JsonValue
jsonc.get_path("car.variants.0", json); // The output is Ok, containing a JsonValue
jsonc.get_path("car.variants.1.fuel", json); // The output is Ok, containing a JsonValue
jsonc.get_path("car.variants.99.fuel", json); // The output is None
jsonc.get_path("car.variants.one", json); // The output is None
列表功能
考虑以下内容
{
"cars": [
{
"model": "Gurgel Itaipu E400",
"color": "red"
},
{
"model": "Gurgel X15",
"color": "brown"
}
]
}
解析到Vec
您可以解析列表到vec
let json = jsonc.read_str(content);
let cars = jsonc.get_path("cars", json).unwrap();
jsonc.parse_to_vec(cars); // The output is a vec of JsonValue, with len 2
序列化功能
序列化
此功能与JavaScript JSON.stringify 相当
考虑以下内容
{
"car": {
"model": "Gurgel Itaipu E4000",
"color": "red"
}
}
使用序列化输出为
let serialized = jsonc.serialize(myjson);
assert_eq!("{\"car\":{\"model\":\"Gurgel Itaipu E400\",\"color\":\"red\"}}", serialized);
序列化到BSON十六进制
let bson_hex = jsonc.serialize_to_bson_hex(myjson);
assert_eq!("3c000000036361720032000000026d6f64656c001300000047757267656c2049746169707520453430300002636f6c6f720004000000726564000000", bson_hex)
您可以使用此工具检查BSON十六进制
解析器功能
- json_from_bson_hex
- 从一个十六进制字符串返回一个
json::JsonValue
- 从一个十六进制字符串返回一个
- parse_to_document
- 从一个
json::JsonValue
返回一个bson::Document
- 从一个
- json_from_document
- 从一个
bson::Document
返回一个json::JsonValue
- 从一个
- parse_to_bson
- 从一个
json::JsonValue
返回一个bson::Bson
- 从一个
- json_from_bson
- 从一个
bson::Bson
返回一个json::JsonValue
- 从一个
依赖关系
~6.5MB
~127K SLoC