4 releases

0.2.2 May 30, 2020
0.2.1 May 30, 2020
0.2.0 May 30, 2020
0.1.0 May 30, 2020

#2893 in Parser implementations

43 downloads per month

MIT license

320 lines



WIP - work in progress, use at your own risk

A JSON superset


  • JSON-compatible
  • Objects & arrays may have trailing comma
  • Object keys may not need quotes
  • Single & multiline comments are allowed
  • Strings may use double and/or single quotes
  • Values can be referenced from other parts of the object tree


    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");

Parse 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",



I would love to get some feedback if you find my little project useful. Please feel free to highlight issues with my code or submit a PR in case you want to improve it. Note that the goal so far hasn't been performance, rather on functionality and api.


~76K SLoC