4 个版本
0.2.2 | 2020 年 5 月 30 日 |
---|---|
0.2.1 | 2020 年 5 月 30 日 |
0.2.0 | 2020 年 5 月 30 日 |
0.1.0 | 2020 年 5 月 30 日 |
#2958 在 解析器实现
19KB
320 代码行
D4t4
WIP - 进行中,使用风险自担
JSON 超集
特性
- 兼容 JSON
- 对象和数组可以有尾随逗号
- 对象键可能不需要引号
- 允许单行和多行注释
- 字符串可以使用双引号和/或单引号
- 可以从对象树的其它部分引用值
示例
use d4t4::parse;
fn main() {
let data = r#"{
/*
Look how nice, we can separate re-useable data!
*/
padding: {
s: '1px',
m: '2px',
l: '3px', // note: triling comma
},
color: {
red: '#fed7d7',
green: '#c6f6d5',
blue: '#bee3f8', # note: found another one!
},
objects: [
{
border: "1px solid &{color.red}",
padding: "&{padding.s}",
},
{
border: "1px solid &{color.green}",
padding: "&{padding.m}",
},
{
border: "1px solid &{color.blue}",
padding: "&{padding.l}",
},
]
}"#;
let json = parse(data).ok().unwrap();
assert_eq!(json["objects"][0]["padding"], "1px");
assert_eq!(json["objects"][1]["padding"], "2px");
assert_eq!(json["objects"][2]["padding"], "3px");
}
解析 json
use d4t4::parse;
fn main() {
let json = r#"{
"number": 100,
"null": null,
"true": true,
"object": {},
"array": [1,2,3],
"unicode": "\u1234",
"string": "check out the tests directory if you want to see more",
}"#;
assert!(parse(json).is_ok());
}
贡献
如果您觉得我的小项目有用,我很乐意得到一些反馈。请随时指出我的代码中的问题或提交 PR 以改进它。请注意,到目前为止的目标不是性能,而是功能和 API。
依赖关系
~2.6–3.5MB
~75K SLoC