2 个版本
0.1.1 | 2023 年 6 月 23 日 |
---|---|
0.1.0 | 2023 年 6 月 23 日 |
#2494 在 解析器实现
18KB
204 行
jsonc-to-json
将 带注释的 JSON 转换为 JSON 的简单库,简而言之,它移除了以下内容
- 行注释,例如
// 行注释
- 块注释,例如
/* 块注释 */
- 尾随逗号,例如
[1,2,3,,]
->[1,2,3]
注意: 实现不使用完整的 带注释的 JSON 解析器。相反,它使用一个 带注释的 JSON 分词器,这使得转换更快。
目前不支持 #![no_std]
。然而,一旦应用了一些上游更改,它将被添加。
有关更多信息,请参阅 jsonc_to_json()
。
示例
use jsonc_to_json::{jsonc_to_json, jsonc_to_json_into};
let jsonc = "{\"arr\": [1, 2,/* Comment */ 3, 4,,]}// Line Comment";
let json = jsonc_to_json(jsonc);
println!("{}", json);
// Alternatively, use `jsonc_to_json_into()` to reuse an
// already allocated `String`
let mut json = String::new();
jsonc_to_json_into(jsonc, &mut json);
println!("{}", json);
两者都输出以下内容
{"arr": [1, 2, 3, 4]}
Serde 示例
use jsonc_to_json::{jsonc_to_json, jsonc_to_json_into};
use serde::Deserialize;
#[derive(Deserialize, Debug)]
struct Data {
arr: Vec<i32>,
}
let jsonc = "{\"arr\": [1, 2,/* Comment */ 3, 4,,]}// Line Comment";
let json = jsonc_to_json(jsonc);
let data: Data = serde_json::from_str(&json)?;
println!("{}", json);
println!("{:?}", data);
输出以下内容
{"arr": [1, 2, 3, 4]}
Data { arr: [1, 2, 3, 4] }
非分配 & 零拷贝迭代器示例
非分配 Iterator
,生成有效的 JSON 字符串切片。
use jsonc_to_json::jsonc_to_json_iter;
let jsonc = r#"{foo}/**/[1,2,3,,]"bar""#;
let mut iter = jsonc_to_json_iter(jsonc);
assert_eq!(iter.next(), Some("{foo}")); // Line comment was removed
assert_eq!(iter.next(), Some("[1,2,3")); // Trailing commas was removed
assert_eq!(iter.next(), Some("]\"bar\""));
assert_eq!(iter.next(), None);
依赖关系
~270KB