{"id":14985633,"url":"https://github.com/jbzoo/data","last_synced_at":"2025-04-05T23:12:34.721Z","repository":{"id":45240879,"uuid":"39969996","full_name":"JBZoo/Data","owner":"JBZoo","description":"Extended implementation of ArrayObject - useful collection for any config in your system (write, read, store, change, validate, convert to other format and etc).","archived":false,"fork":false,"pushed_at":"2024-01-28T08:47:32.000Z","size":208,"stargazers_count":83,"open_issues_count":1,"forks_count":7,"subscribers_count":7,"default_branch":"master","last_synced_at":"2024-10-30T10:32:06.635Z","etag":null,"topics":["arrayobject","config","converts","data","filters","ini","jbzoo","php","yml"],"latest_commit_sha":null,"homepage":"","language":"PHP","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/JBZoo.png","metadata":{"files":{"readme":"README.md","changelog":null,"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":"2015-07-30T20:04:14.000Z","updated_at":"2024-10-24T20:31:11.000Z","dependencies_parsed_at":"2024-06-18T13:33:14.644Z","dependency_job_id":"7c2f6f9d-e82a-4c5b-88f2-41572d1c3d88","html_url":"https://github.com/JBZoo/Data","commit_stats":{"total_commits":224,"total_committers":9,"mean_commits":24.88888888888889,"dds":0.7366071428571428,"last_synced_commit":"c21704f61c30448d2dadf6317beb9b6f3cdf6e4f"},"previous_names":[],"tags_count":41,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JBZoo%2FData","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JBZoo%2FData/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JBZoo%2FData/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JBZoo%2FData/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JBZoo","download_url":"https://codeload.github.com/JBZoo/Data/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247411239,"owners_count":20934653,"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":["arrayobject","config","converts","data","filters","ini","jbzoo","php","yml"],"created_at":"2024-09-24T14:11:24.054Z","updated_at":"2025-04-05T23:12:34.698Z","avatar_url":"https://github.com/JBZoo.png","language":"PHP","readme":"# JBZoo / Data\n\n[![CI](https://github.com/JBZoo/Data/actions/workflows/main.yml/badge.svg?branch=master)](https://github.com/JBZoo/Data/actions/workflows/main.yml?query=branch%3Amaster)    [![Coverage Status](https://coveralls.io/repos/github/JBZoo/Data/badge.svg?branch=master)](https://coveralls.io/github/JBZoo/Data?branch=master)    [![Psalm Coverage](https://shepherd.dev/github/JBZoo/Data/coverage.svg)](https://shepherd.dev/github/JBZoo/Data)    [![Psalm Level](https://shepherd.dev/github/JBZoo/Data/level.svg)](https://shepherd.dev/github/JBZoo/Data)    [![CodeFactor](https://www.codefactor.io/repository/github/jbzoo/data/badge)](https://www.codefactor.io/repository/github/jbzoo/data/issues)    \n[![Stable Version](https://poser.pugx.org/jbzoo/data/version)](https://packagist.org/packages/jbzoo/data/)    [![Total Downloads](https://poser.pugx.org/jbzoo/data/downloads)](https://packagist.org/packages/jbzoo/data/stats)    [![Dependents](https://poser.pugx.org/jbzoo/data/dependents)](https://packagist.org/packages/jbzoo/data/dependents?order_by=downloads)    [![GitHub License](https://img.shields.io/github/license/jbzoo/data)](https://github.com/JBZoo/Data/blob/master/LICENSE)\n\n\nAn extended version of the [ArrayObject](http://php.net/manual/en/class.arrayobject.php) object for working with system settings or just for working with data arrays.\n\nIt provides a short syntax for daily routine, eliminates common mistakes. Allows you to work with various line and file formats - JSON, Yml, Ini, PHP arrays and simple objects.\n\n\u003c!--ts--\u003e\n   * [Installation](#installation)\n   * [Usage](#usage)\n      * [Comparison with pure PHP](#comparison-with-pure-php)\n      * [Know your data](#know-your-data)\n         * [Methods](#methods)\n         * [Filter values (required JBZoo/Utils)](#filter-values-required-jbzooutils)\n         * [Utility methods](#utility-methods)\n         * [Export to pretty-print format](#export-to-pretty-print-format)\n   * [Summary benchmark info (execution time) PHP v7.4](#summary-benchmark-info-execution-time-php-v74)\n   * [Unit tests and check code style](#unit-tests-and-check-code-style)\n   * [License](#license)\n   * [See Also](#see-also)\n\u003c!--te--\u003e\n\n\n## Installation\n```sh\ncomposer require jbzoo/data\n```\n\n## Usage\n\n### Comparison with pure PHP\n\n--------------------------------------------------------------------------------\n| Action                               | JBZoo/Data                                      | Pure PHP way                             |\n|:-------------------------------------|:------------------------------------------------|:-----------------------------------------|\n| Create                               | `$d = data($someData)`                          | `$ar = [/* ... */];`                     |\n| Supported formats                    | Array, Object, ArrayObject, JSON, INI, Yml      | Array                                    |\n| Load form file                       | *.php, *.ini, *.yml, *.json, serialized         | -                                        |\n| Get value or default                 | `$d-\u003eget('key', 42)`                            | `$ar['key'] ?? 42`                       |\n| Get undefined #1                     | `$d-\u003eget('undefined')` (no any notice)          | `$ar['undefined'] ?? null`               |\n| Get undefined #2                     | `$d-\u003efind('undefined')`                         | `$ar['und'] ??  null`                    |\n| Get undefined #3                     | `$d-\u003eundefined === null` (no any notice)        | -                                        |\n| Get undefined #4                     | `$d['undefined'] === null` (no any notice)      | -                                        |\n| Get undefined #5                     | `$d['undef']['undef'] === null` (no any notice) | -                                        |\n| Comparing #1                         | `$d-\u003eget('key') === $someVar`                   | `$ar['key'] === $someVar`                |\n| Comparing #2                         | `$d-\u003eis('key', $someVar)`                       | -                                        |\n| Comparing #3                         | `$d-\u003eis('key', $someVar, true)` (strict)        | -                                        |\n| Like array                           | `$d['key']`                                     | `$ar['key']`                             |\n| Like object #1                       | `$d-\u003ekey`                                       | -                                        |\n| Like object #2                       | `$d-\u003eget('key')`                                | -                                        |\n| Like object #3                       | `$d-\u003efind('key')`                               | -                                        |\n| Like object #4                       | `$d-\u003eoffsetGet('key')`                          | -                                        |\n| Isset #1                             | `isset($d['key'])`                              | `isset($ar['key'])`                      |\n| Isset #2                             | `isset($d-\u003ekey)`                                | `array_key_exists('key', $ar)`           |\n| Isset #3                             | `$d-\u003ehas('key')`                                | -                                        |\n| Nested key  #1                       | `$d-\u003efind('inner.inner.prop', $default)`        | `$ar['inner']['inner']['prop']` (error?) |\n| Nested key  #2                       | `$d-\u003einner['inner']['prop']`                    | -                                        |\n| Nested key  #3                       | `$d['inner']['inner']['prop']`                  | -                                        |\n| Export to Serialized                 | `echo data([/* ... */])`                        | `echo serialize([/* ... */])`            |\n| Export to JSON                       | `echo (json([/* ... */]))` (readable)           | `echo json_encode([/* ... */])`          |\n| Export to Yml                        | `echo yml([/* ... */])` (readable)              | -                                        |\n| Export to Ini                        | `echo ini([/* ... */])` (readable)              | -                                        |\n| Export to PHP Code                   | `echo phpArray([/* ... */])` (readable)         | -                                        |\n| JSON                                 | **+**                                           | -                                        |\n| Filters                              | **+**                                           | -                                        |\n| Search                               | **+**                                           | -                                        |\n| Flatten Recursive                    | **+**                                           | -                                        |\n| Set Value                            | `$d['value'] = 42`                              | $ar['value'] = 42                        |\n| Set Nested Value                     | `$d-\u003eset('q.w.e.r.t.y') = 42`                   | $ar['q']['w']['e']['r']['t']['y'] = 42   |\n| Set Nested Value (if it's undefined) | `$d-\u003eset('q.w.e.r.t.y') = 42`                   | PHP Notice errors...                     |\n\n\n### Know your data\n\n```php\n$json = json('{ \"some\": \"thing\", \"number\": 42 }');\ndump($json-\u003egetSchema();\n// [\n//     \"some\" =\u003e \"string\",\n//     \"number\" =\u003e \"int\"\n// ]\n\n```\n\n\n#### Methods\n\n```php\nuse function JBZoo\\Data\\data;\nuse function JBZoo\\Data\\ini;\nuse function JBZoo\\Data\\json;\nuse function JBZoo\\Data\\phpArray;\nuse function JBZoo\\Data\\yml;\n\n$config = data([/* Assoc Array */]);       // Any PHP-array or simple object, serialized data\n$config = ini('./configs/some.ini');       // Load configs from ini file (or string, or simple array)\n$config = yml('./configs/some.yml');       // Yml (or string, or simple array). Parsed with Symfony/Yaml Component.\n$config = json('./configs/some.json');     // JSON File (or string, or simple array)\n$config = phpArray('./configs/some.php');  // PHP-file that must return array\n\n// Read\n$config-\u003eget('key', 42);                   // Returns value if it exists oR returns default value\n$config['key'];                            // As regular array\n$config-\u003ekey;                              // As regular object\n\n// Read nested values without PHP errors\n$config-\u003efind('deep.config.key', 42);      // Gets `$config['very']['deep']['config']['key']` OR returns default value\n\n// Write\n$config-\u003eset('key', 42);\n$config['key'] = 42;\n$config-\u003ekey = 42;\n\n// Isset\n$config-\u003ehas('key');\nisset($config['key']);\nisset($config-\u003ekey);\n\n// Unset\n$config-\u003eremove('key');\nunset($config['key']);\nunset($config-\u003ekey);\n\n```\n\n\n#### Filter values (required JBZoo/Utils)\n\nList of filters - [JBZoo/Utils/Filter](https://github.com/JBZoo/Utils/blob/master/src/Filter.php)\n * `bool` -  Converts many english words that equate to true or false to boolean.\n * `int` - Smart converting to integer\n * `float` - Smart converting to float\n * `digits` - Leaves only \"0-9\"\n * `alpha` - Leaves only \"a-zA-Z\"\n * `alphanum` - Combination of `digits` and `alpha` \n * `base64` - Returns only chars which are compatible with base64\n * `path` - Clean FS path\n * `trim` - Extend trim\n * `arr` - Converting to array\n * `cmd` - Cleanup system command (CLI)\n * `email` - Returns cleaned up email or null\n * `strip` - Strip tags\n * `alias` - Sluggify\n * `low` - String to lower (uses mbstring or symfony polyfill)\n * `up` - String to upper (uses mbstring or symfony polyfill)\n * `clean` - Returns safe string\n * `html` - HTML escaping\n * `xml` - XML escaping\n * `esc` - Escape chars for UTF-8\n * `function($value) { return $value; }` - Your custom callback function\n\n\n```php\n$config-\u003eget('key', 42, 'int');         // Smart converting to integer\n$config-\u003efind('key', 42, 'float');      // To float\n$config-\u003efind('no', 'yes', 'bool');     // Smart converting popular word to boolean value\n$config-\u003eget('key', 42, 'strip, trim'); // Chain of filters\n\n// Your custom handler\n$config-\u003eget('key', 42, function($value) {\n    return (float)str_replace(',', '.', $value);\n});\n```\n\n\n#### Utility methods\n```php\n$config-\u003esearch($needle);       // Find a value also in nested arrays/objects\n$config-\u003eflattenRecursive();    // Return flattened array copy. Keys are \u003cb\u003eNOT\u003c/b\u003e preserved.\n```\n\n#### Export to pretty-print format\n```php\necho $config;\n\n$result = '' . $config;\n$result = (string)$config;\n$result = $config-\u003e__toString();\n```\n\nExample of serializing the `JSON` object\n```json\n{\n    \"empty\": \"\",\n    \"zero\": \"0\",\n    \"string\": \" \",\n    \"tag\": \"\u003ca href=\\\"http:\\/\\/google.com\\\"\u003eGoogle.com\u003c\\/a\u003e\",\n    \"array1\": {\n        \"0\": \"1\",\n        \"1\": \"2\"\n    },\n    \"section\": {\n        \"array2\": {\n            \"0\": \"1\",\n            \"12\": \"2\",\n            \"3\": \"3\"\n        }\n    },\n    \"section.nested\": {\n        \"array3\": {\n            \"00\": \"0\",\n            \"01\": \"1\"\n        }\n    }\n}\n```\n\nExample of serializing the `PHPArray` object\n```php\n\u003c?php\n\nreturn array(\n    'empty' =\u003e '',\n    'zero' =\u003e '0',\n    'string' =\u003e ' ',\n    'tag' =\u003e '\u003ca href=\"http://google.com\"\u003eGoogle.com\u003c/a\u003e',\n    'array1' =\u003e array(\n        0 =\u003e '1',\n        1 =\u003e '2',\n    ),\n    'section' =\u003e array(\n        'array2' =\u003e array(\n            0 =\u003e '1',\n            12 =\u003e '2',\n            3 =\u003e '3',\n        ),\n    ),\n    'section.nested' =\u003e array(\n        'array3' =\u003e array(\n            '00' =\u003e '0',\n            '01' =\u003e '1',\n        ),\n    ),\n);\n```\n\nExample of serializing the `Yml` object\n```yml\nempty: ''\nzero: '0'\nstring: ' '\ntag: '\u003ca href=\"http://google.com\"\u003eGoogle.com\u003c/a\u003e'\narray1:\n    - '1'\n    - '2'\nsection:\n    array2: { 0: '1', 12: '2', 3: '3' }\nsection.nested:\n    array3: ['0', '1']\n```\n\nExample of serializing the `Ini` object\n```ini\nempty = \"\"\nzero = \"0\"\nstring = \" \"\ntag = \"\u003ca href=\\\"http://google.com\\\"\u003eGoogle.com\u003c/a\u003e\"\narray1[0] = \"1\"\narray1[1] = \"2\"\n\n[section]\narray2[0] = \"1\"\narray2[12] = \"2\"\narray2[3] = \"3\"\n\n[section.nested]\narray3[00] = \"0\"\narray3[01] = \"1\"\n```\n\nExample of serializing the `Data` object\n```\na:7:{s:5:\"empty\";s:0:\"\";s:4:\"zero\";s:1:\"0\";s:6:\"string\";s:1:\" \";s:3:\"tag\";s:42:\"\u003ca href=\"http://google.com\"\u003eGoogle.com\u003c/a\u003e\";s:6:\"array1\";a:2:{i:0;s:1:\"1\";i:1;s:1:\"2\";}s:7:\"section\";a:1:{s:6:\"array2\";a:3:{i:0;s:1:\"1\";i:12;s:1:\"2\";i:3;s:1:\"3\";}}s:14:\"section.nested\";a:1:{s:6:\"array3\";a:2:{s:2:\"00\";s:1:\"0\";s:2:\"01\";s:1:\"1\";}}}\n```\n\n## Summary benchmark info (execution time) PHP v7.4\nAll benchmark tests are executing without xdebug and with a huge random array and 100.000 iterations.\n\nBenchmark tests based on the tool [phpbench/phpbench](https://github.com/phpbench/phpbench). See details [here](tests/phpbench).   \n\nPlease, pay attention - `1μs = 1/1.000.000 of second!`\n\n**benchmark: CreateObject**\nsubject | groups | its | revs | mean | stdev | rstdev | mem_real | diff\n --- | --- | --- | --- | --- | --- | --- | --- | --- \nbenchArrayObjectOrig | Native,ArrayObject | 3 | 100000 | 7.30μs | 0.01μs | 0.18% | 8,388,608b | 1.00x\nbenchArrayObjectExtOrig | Native,ArrayObject,Extended | 3 | 100000 | 7.43μs | 0.05μs | 0.66% | 8,388,608b | 1.02x\nbenchJson | JSON | 3 | 100000 | 7.55μs | 0.01μs | 0.15% | 8,388,608b | 1.03x\nbenchIni | Ini | 3 | 100000 | 7.55μs | 0.01μs | 0.15% | 8,388,608b | 1.03x\nbenchData | Data | 3 | 100000 | 7.57μs | 0.03μs | 0.41% | 8,388,608b | 1.04x\nbenchIniFunc | Ini,Func | 3 | 100000 | 7.62μs | 0.01μs | 0.10% | 8,388,608b | 1.04x\nbenchDataFunc | Data,Func | 3 | 100000 | 7.63μs | 0.01μs | 0.19% | 8,388,608b | 1.05x\nbenchYml | Yml | 3 | 100000 | 7.63μs | 0.10μs | 1.36% | 8,388,608b | 1.05x\nbenchJsonFunc | JSON,Func | 3 | 100000 | 7.64μs | 0.01μs | 0.11% | 8,388,608b | 1.05x\nbenchPhpArray | PhpArray | 3 | 100000 | 7.65μs | 0.03μs | 0.44% | 8,388,608b | 1.05x\nbenchYmlFunc | Yml,Func | 3 | 100000 | 7.70μs | 0.05μs | 0.60% | 8,388,608b | 1.05x\nbenchPhpArrayFunc | PhpArray,Func | 3 | 100000 | 7.75μs | 0.06μs | 0.72% | 8,388,608b | 1.06x\n\n\n**benchmark: GetUndefinedValue**\nsubject | groups | its | revs | mean | stdev | rstdev | mem_real | diff\n --- | --- | --- | --- | --- | --- | --- | --- | --- \nbenchArrayIsset | Native,Array,Undefined | 3 | 1000000 | 0.04μs | 0.00μs | 1.48% | 8,388,608b | 1.00x\nbenchDataOffsetGet | Data,Undefined | 3 | 1000000 | 0.11μs | 0.00μs | 0.41% | 8,388,608b | 2.88x\nbenchDataGet | Data,Undefined | 3 | 1000000 | 0.14μs | 0.00μs | 0.39% | 8,388,608b | 3.56x\nbenchDataArray | Data,Undefined | 3 | 1000000 | 0.14μs | 0.00μs | 0.08% | 8,388,608b | 3.72x\nbenchDataArrow | Data,Undefined | 3 | 1000000 | 0.15μs | 0.00μs | 0.34% | 8,388,608b | 3.86x\nbenchArrayRegularMuted | Native,Array,Undefined | 3 | 1000000 | 0.19μs | 0.00μs | 0.04% | 8,388,608b | 4.99x\nbenchDataFind | Data,Undefined | 3 | 1000000 | 0.37μs | 0.00μs | 0.11% | 8,388,608b | 9.69x\nbenchDataFindInner | Data,Undefined | 3 | 1000000 | 0.41μs | 0.00μs | 0.14% | 8,388,608b | 10.86x\n\n\n**benchmark: GetValue**\nsubject | groups | its | revs | mean | stdev | rstdev | mem_real | diff\n --- | --- | --- | --- | --- | --- | --- | --- | --- \nbenchArrayRegular | Native,Array | 3 | 1000000 | 0.04μs | 0.00μs | 5.02% | 8,388,608b | 1.00x\nbenchArrayRegularMuted | Native,Array | 3 | 1000000 | 0.04μs | 0.00μs | 1.40% | 8,388,608b | 1.06x\nbenchArrayIsset | Native,Array | 3 | 1000000 | 0.04μs | 0.00μs | 2.04% | 8,388,608b | 1.07x\nbenchArrayObjectArray | Native,ArrayObject | 3 | 1000000 | 0.05μs | 0.00μs | 1.07% | 8,388,608b | 1.14x\nbenchArrayObjectArrayExt | Native,ArrayObject,Extended | 3 | 1000000 | 0.05μs | 0.00μs | 0.24% | 8,388,608b | 1.19x\nbenchArrayObjectOffsetGet | Native,ArrayObject | 3 | 1000000 | 0.07μs | 0.00μs | 1.35% | 8,388,608b | 1.77x\nbenchArrayObjectExtOffsetGet | Native,ArrayObject,Extended | 3 | 1000000 | 0.08μs | 0.00μs | 0.23% | 8,388,608b | 1.86x\nbenchDataOffsetGet | Data | 3 | 1000000 | 0.16μs | 0.00μs | 0.28% | 8,388,608b | 4.01x\nbenchDataArray | Data | 3 | 1000000 | 0.20μs | 0.00μs | 0.17% | 8,388,608b | 4.96x\nbenchDataArrow | Data | 3 | 1000000 | 0.21μs | 0.00μs | 0.21% | 8,388,608b | 5.07x\nbenchDataGet | Data | 3 | 1000000 | 0.28μs | 0.00μs | 0.21% | 8,388,608b | 6.95x\nbenchDataFind | Data | 3 | 1000000 | 0.35μs | 0.00μs | 0.65% | 8,388,608b | 8.52x\n\n**benchmark: GetValueInner**\nsubject | groups | its | revs | mean | stdev | rstdev | mem_real | diff\n --- | --- | --- | --- | --- | --- | --- | --- | --- \nbenchArrayRegular | Native,Array | 3 | 1000000 | 0.05μs | 0.00μs | 0.23% | 8,388,608b | 1.00x\nbenchArrayRegularMuted | Native,Array | 3 | 1000000 | 0.06μs | 0.00μs | 0.86% | 8,388,608b | 1.06x\nbenchArrayIsset | Native,Array | 3 | 1000000 | 0.06μs | 0.00μs | 0.27% | 8,388,608b | 1.08x\nbenchArrayObjectArrayExt | Native,ArrayObject,Extended | 3 | 1000000 | 0.06μs | 0.00μs | 0.76% | 8,388,608b | 1.14x\nbenchArrayObjectArray | Native,ArrayObject | 3 | 1000000 | 0.07μs | 0.00μs | 1.39% | 8,388,608b | 1.22x\nbenchDataFind | Data | 3 | 1000000 | 0.81μs | 0.01μs | 1.06% | 8,388,608b | 15.22x\n\n\n## Unit tests and check code style\n```sh\nmake update\nmake test-all\n```\n\n\n## License\n\nMIT\n\n\n## See Also\n\n- [CI-Report-Converter](https://github.com/JBZoo/CI-Report-Converter) - Converting different error reports for deep compatibility with popular CI systems.\n- [Composer-Diff](https://github.com/JBZoo/Composer-Diff) - See what packages have changed after `composer update`.\n- [Composer-Graph](https://github.com/JBZoo/Composer-Graph) - Dependency graph visualization of composer.json based on mermaid-js.\n- [Mermaid-PHP](https://github.com/JBZoo/Mermaid-PHP) - Generate diagrams and flowcharts with the help of the mermaid script language.\n- [Utils](https://github.com/JBZoo/Utils) - Collection of useful PHP functions, mini-classes, and snippets for every day.\n- [Image](https://github.com/JBZoo/Image) - Package provides object-oriented way to manipulate with images as simple as possible.\n- [Retry](https://github.com/JBZoo/Retry) - Tiny PHP library providing retry/backoff functionality with multiple backoff strategies and jitter support.\n- [SimpleTypes](https://github.com/JBZoo/SimpleTypes) - Converting any values and measures - money, weight, exchange rates, length, ...\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjbzoo%2Fdata","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjbzoo%2Fdata","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjbzoo%2Fdata/lists"}