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解析器实现

MIT 许可证

19KB
320 代码行

github

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