{"id":17695873,"url":"https://github.com/nadako/hxjsonast","last_synced_at":"2025-10-20T09:29:10.578Z","repository":{"id":43885651,"uuid":"68046764","full_name":"nadako/hxjsonast","owner":"nadako","description":"Parse JSON into position-aware AST with Haxe!","archived":false,"fork":false,"pushed_at":"2024-03-11T09:01:30.000Z","size":206,"stargazers_count":33,"open_issues_count":0,"forks_count":2,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-03-31T11:11:22.476Z","etag":null,"topics":["ast","haxe","json","parsing"],"latest_commit_sha":null,"homepage":null,"language":"Haxe","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nadako.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-09-12T20:53:04.000Z","updated_at":"2025-02-01T18:54:49.000Z","dependencies_parsed_at":"2024-10-24T16:52:07.371Z","dependency_job_id":"9ca6d7d7-ac22-4d1e-9d65-a575f629da01","html_url":"https://github.com/nadako/hxjsonast","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nadako%2Fhxjsonast","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nadako%2Fhxjsonast/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nadako%2Fhxjsonast/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nadako%2Fhxjsonast/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nadako","download_url":"https://codeload.github.com/nadako/hxjsonast/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252898747,"owners_count":21821677,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ast","haxe","json","parsing"],"created_at":"2024-10-24T14:07:15.411Z","updated_at":"2025-10-20T09:29:10.479Z","avatar_url":"https://github.com/nadako.png","language":"Haxe","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Build Status](https://travis-ci.org/nadako/hxjsonast.svg?branch=master)](https://travis-ci.org/nadako/hxjsonast)\n\n# hxjsonast - typed position aware JSON parsing for Haxe\n\nThis library contains a JSON parser that parses JSON (sic!) into a position-aware typed\nvalue objects. It also contains a printer for those objects, supporting pretty-printing.\n\nThis is useful for writing all kinds of JSON validation and processing software.\n\nThe parsing and printing code comes from standard `haxe.format.JsonParser/JsonPrinter` classes,\nadapted to work with custom data structures.\n\n## Installation\n\n```\nhaxelib install hxjsonast\n```\n\n## Usage\n\nGenerated API documentation is here: \u003chttps://nadako.github.io/hxjsonast/\u003e,\nbut a code snippet is worth a thousand words (compile with `-lib hxjsonast`):\n```haxe\nimport hxjsonast.*;\n\nclass Main {\n    static function main() {\n        var filename = 'person.json';\n        var contents = '{\"name\": \"Dan\", \"age\": 29, \"married\": true}';\n\n        // parsing is easy!\n        var json = hxjsonast.Parser.parse(contents, filename);\n\n        // `pos` store the filename, start and end characters\n        trace(json.pos); // {file: 'person.json', min: 0, max: 43}\n\n        // `value` is an enum, easy to work with pattern matching\n        switch (json.value) {\n            case JNull: trace('null!');\n            case JString(string): trace('string!');\n            case JBool(bool): trace('boolean!');\n            case JNumber(number): trace('number!');\n            case JArray(values): trace('array!');\n            case JObject(fields): trace('object!');\n        }\n\n        // constructing Json is easy too, we just pass position and value to its constructor\n        var myJson = new Json(\n            JArray([\n                new Json(JString(\"hello\"), new Position(\"some.json\", 3, 10)),\n                new Json(JString(\"world\"), new Position(\"other.json\", 11, 30)),\n            ]),\n            new Position(\"some.json\", 0, 42)\n        );\n\n        // with Haxe 3.3, we can also use new fancy @:structInit syntax instead of classic `new` operator, e.g.\n        var myJson:Json = {\n            pos: {file: \"some.json\", min: 0, max: 42},\n            value: JArray([\n                {\n                    pos: {file: \"some.json\", min: 3, max: 10},\n                    value: JString(\"hello\"),\n                },\n                {\n                    pos: {file: \"other.json\", min: 11, max: 30},\n                    value: JString(\"world\")\n                }\n            ])\n        };\n\n        // printing is easy as well (you can also pretty-print by specifying the second argument)\n        var out = hxjsonast.Printer.print(myJson);\n        trace(out); // [\"hello\",\"world\"]\n\n        // there's a tool to convert Json values into \"normal\" objects and arrays\n        var value = hxjsonast.Tools.getValue(myJson);\n        trace(Std.is(value, Array)); // true\n    }\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnadako%2Fhxjsonast","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnadako%2Fhxjsonast","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnadako%2Fhxjsonast/lists"}