{"id":20127394,"url":"https://github.com/buserror/libejson","last_synced_at":"2025-09-21T04:32:08.674Z","repository":{"id":3732012,"uuid":"4805632","full_name":"buserror/libejson","owner":"buserror","description":"lightweight and fast library for parsing JSON and Extended-JSON","archived":false,"fork":false,"pushed_at":"2020-12-23T13:32:52.000Z","size":80,"stargazers_count":3,"open_issues_count":0,"forks_count":2,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-01-12T06:04:12.014Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/buserror.png","metadata":{"files":{"readme":"README.html","changelog":null,"contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2012-06-27T07:45:15.000Z","updated_at":"2024-12-30T09:34:01.000Z","dependencies_parsed_at":"2022-07-29T00:48:42.716Z","dependency_job_id":null,"html_url":"https://github.com/buserror/libejson","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/buserror%2Flibejson","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/buserror%2Flibejson/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/buserror%2Flibejson/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/buserror%2Flibejson/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/buserror","download_url":"https://codeload.github.com/buserror/libejson/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":233711484,"owners_count":18718037,"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":[],"created_at":"2024-11-13T20:20:58.899Z","updated_at":"2025-09-21T04:32:03.383Z","avatar_url":"https://github.com/buserror.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\"\u003e\n\u003chtml\u003e\n\u003chead\u003e\n  \u003cmeta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"\u003e\n  \u003cmeta http-equiv=\"Content-Style-Type\" content=\"text/css\"\u003e\n  \u003ctitle\u003e\u003c/title\u003e\n  \u003cmeta name=\"Generator\" content=\"Cocoa HTML Writer\"\u003e\n  \u003cmeta name=\"CocoaVersion\" content=\"1038.32\"\u003e\n  \u003cstyle type=\"text/css\"\u003e\n    p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica}\n    p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px}\n    p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Helvetica}\n    span.Apple-tab-span {white-space:pre}\n  \u003c/style\u003e\n\u003c/head\u003e\n\u003cbody\u003e\n\u003cp class=\"p1\"\u003elibejson, © Michel Pollet \u0026lt;buserror@gmail.com\u0026gt;\u003c/p\u003e\n\u003cp class=\"p1\"\u003e\u003ca href=\"http://gitorious.org/libejson\"\u003ehttp://gitorious.org/libejson\u003c/a\u003e\u003c/p\u003e\n\u003cp class=\"p2\"\u003e\u003cbr\u003e\u003c/p\u003e\n\u003cp class=\"p1\"\u003elibejson is a library designed to parse JSON text (http://json.org/), as well as EJSON, an \"extended\" version of JSON that was designed to be more friendly for settings files, storage, and other uses like human interface description files.\u003c/p\u003e\n\u003cp class=\"p2\"\u003e\u003cbr\u003e\u003c/p\u003e\n\u003cp class=\"p1\"\u003elibejson uses a simple \"driver\" (collection of callbacks) system, it parses the input and repeatedly calls your callbacks; your code is responsible for storing, allocating and generally \"do stuff\" with the parsed data.\u003c/p\u003e\n\u003cp class=\"p2\"\u003e\u003cbr\u003e\u003c/p\u003e\n\u003cp class=\"p1\"\u003elibejson doesn't allocate memory generally, it will allocate a 128 byte buffer on the stack if it decodes base64 data (see below), otherwise it's footprint is minimal.\u003c/p\u003e\n\u003cp class=\"p2\"\u003e\u003cbr\u003e\u003c/p\u003e\n\u003cp class=\"p1\"\u003e\"Extended\" JSON implements these extensions:\u003c/p\u003e\n\u003cp class=\"p2\"\u003e\u003cbr\u003e\u003c/p\u003e\n\u003cp class=\"p1\"\u003e\u003cb\u003eEJSON makes quoting node identifiers optional, if they don't contain spaces.\u003c/b\u003e\u003c/p\u003e\n\u003cp class=\"p1\"\u003eNormal JSON forces you to use syntax like '\u003ci\u003e{ \"hello\" : \"world\" }\u003c/i\u003e' in EJSON, you can use '\u003ci\u003e{ hello : \"world\" }\u003c/i\u003e'. This makes it easier to read/edit settings files by hand.\u003c/p\u003e\n\u003cp class=\"p1\"\u003e\u003cb\u003eEJSON nodes can have flags/attributes\u003c/b\u003e\u003c/p\u003e\n\u003cp class=\"p1\"\u003eYou can specify a list of words as a node \"attribute\". This allows flags to be passed to the host program for this particular node. It's especially important for files that describe human interface, or to allow easier debugging in some cases.\u003c/p\u003e\n\u003cp class=\"p1\"\u003eSyntax Example: \u003ci\u003e{ node_label (visible, translated) : \"Bonjour\" }\u003c/i\u003e\u003c/p\u003e\n\u003cp class=\"p1\"\u003e\u003cb\u003eEJSON explicitly allows trailing comma in lists\u003c/b\u003e\u003c/p\u003e\n\u003cp class=\"p1\"\u003eJSON does not allow trailing comma in lists, which makes code that generate JSON more complicated for no reason, and also makes \"patching\" JSON files more difficult. EJSON allows trailing commas in objects and arrays.\u003cspan class=\"Apple-converted-space\"\u003e \u003c/span\u003e\u003c/p\u003e\n\u003cp class=\"p1\"\u003eSyntax Example: \u003ci\u003e[0,1,2,]\u003c/i\u003e\u003c/p\u003e\n\u003cp class=\"p1\"\u003e\u003cb\u003eEJSON allows binary data values\u003c/b\u003e\u003c/p\u003e\n\u003cp class=\"p1\"\u003eYou can have arbitrary binary data in nodes, encoded in base64. This is often very useful to store small pieces of binary, small images, or other things embedded in a bigger file. The base64 values are delimited by % (percent) characters.\u003c/p\u003e\n\u003cp class=\"p1\"\u003eSyntax Example: \u003ci\u003e{ node : % WW91IGNhbiBlaXRoZXIgdXBsb2FkIGEgZmlsZ== % }\u003c/i\u003e\u003c/p\u003e\n\u003cp class=\"p1\"\u003e\u003cb\u003eEJSON allows hexadecimal integer constants\u003c/b\u003e\u003c/p\u003e\n\u003cp class=\"p1\"\u003ehex constants are essential for files edited by hand.\u003c/p\u003e\n\u003cp class=\"p1\"\u003eSyntax Example: \u003ci\u003e{ node : 0xdeadbeef }\u003c/i\u003e\u003c/p\u003e\n\u003cp class=\"p2\"\u003e\u003cbr\u003e\u003c/p\u003e\n\u003cp class=\"p1\"\u003eExample:\u003c/p\u003e\n\u003cp class=\"p3\"\u003e{\u003c/p\u003e\n\u003cp class=\"p3\"\u003e\u003cspan class=\"Apple-tab-span\"\u003e\t\u003c/span\u003edevice : [\u003c/p\u003e\n\u003cp class=\"p3\"\u003e\u003cspan class=\"Apple-tab-span\"\u003e\t\u003c/span\u003e{\u003c/p\u003e\n\u003cp class=\"p3\"\u003e\u003cspan class=\"Apple-tab-span\"\u003e\t\u003c/span\u003e\u003cspan class=\"Apple-tab-span\"\u003e\t\u003c/span\u003ename :\u003cspan class=\"Apple-converted-space\"\u003e  \u003c/span\u003e\"Keyboard\",\u003c/p\u003e\n\u003cp class=\"p3\"\u003e\u003cspan class=\"Apple-tab-span\"\u003e\t\u003c/span\u003e\u003cspan class=\"Apple-tab-span\"\u003e\t\u003c/span\u003elabel (visible) : \"105 keys keyboard\",\u003c/p\u003e\n\u003cp class=\"p3\"\u003e\u003cspan class=\"Apple-tab-span\"\u003e\t\u003c/span\u003e\u003cspan class=\"Apple-tab-span\"\u003e\t\u003c/span\u003eflags : 0xcafef00d,\u003c/p\u003e\n\u003cp class=\"p3\"\u003e\u003cspan class=\"Apple-tab-span\"\u003e\t\u003c/span\u003e\u003cspan class=\"Apple-tab-span\"\u003e\t\u003c/span\u003eicon : %\u003c/p\u003e\n\u003cp class=\"p3\"\u003e\u003cspan class=\"Apple-tab-span\"\u003e\t\u003c/span\u003e\u003cspan class=\"Apple-tab-span\"\u003e\t\u003c/span\u003e\u003cspan class=\"Apple-tab-span\"\u003e\t\u003c/span\u003eRGVjb2RlIGJhc2U2NCBzdHJpbmdzIChiYXNlNjQgc3RyaW5nIGxvb2tzIGxpa2UgWVRNME5ab21J\u003c/p\u003e\n\u003cp class=\"p3\"\u003e\u003cspan class=\"Apple-tab-span\"\u003e\t\u003c/span\u003e\u003cspan class=\"Apple-tab-span\"\u003e\t\u003c/span\u003e\u003cspan class=\"Apple-tab-span\"\u003e\t\u003c/span\u003eekkyT1RzbUl6TTBOVHVlWVE9PSkNCkRlY29kZSBhIGJhc2U2NCBlbmNvZGVkIGZpbGUgKGZvciBl\u003c/p\u003e\n\u003cp class=\"p3\"\u003e\u003cspan class=\"Apple-tab-span\"\u003e\t\u003c/span\u003e\u003cspan class=\"Apple-tab-span\"\u003e\t\u003c/span\u003e\u003cspan class=\"Apple-tab-span\"\u003e\t\u003c/span\u003eeGFtcGxlIElDTyBmaWxlcyBvciBmaWxlcyBmcm9tIE1JTUUgbWVzc2FnZSkNCkNvbnZlcnQgc291\u003c/p\u003e\n\u003cp class=\"p3\"\u003e\u003cspan class=\"Apple-tab-span\"\u003e\t\u003c/span\u003e\u003cspan class=\"Apple-tab-span\"\u003e\t\u003c/span\u003e\u003cspan class=\"Apple-tab-span\"\u003e\t\u003c/span\u003ecmNlIHRleHQgZGF0YSBmcm9tIHNldmVyYWwgY29kZSBwYQ== %\u003c/p\u003e\n\u003cp class=\"p3\"\u003e\u003cspan class=\"Apple-tab-span\"\u003e\t\u003c/span\u003e},\u003c/p\u003e\n\u003cp class=\"p3\"\u003e\u003cspan class=\"Apple-tab-span\"\u003e\t\u003c/span\u003e]\u003c/p\u003e\n\u003cp class=\"p3\"\u003e}\u003c/p\u003e\n\u003c/body\u003e\n\u003c/html\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbuserror%2Flibejson","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbuserror%2Flibejson","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbuserror%2Flibejson/lists"}