{"id":50310412,"url":"https://github.com/cscott/zestjq","last_synced_at":"2026-05-28T20:30:49.802Z","repository":{"id":357755545,"uuid":"1231311345","full_name":"cscott/zestjq","owner":"cscott","description":"PHP implementation of 'jq' JSON-filter language","archived":false,"fork":false,"pushed_at":"2026-05-25T18:28:03.000Z","size":478,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-25T20:27:32.592Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/cscott.png","metadata":{"files":{"readme":"README.md","changelog":"HISTORY.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-06T20:55:35.000Z","updated_at":"2026-05-25T18:28:07.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/cscott/zestjq","commit_stats":null,"previous_names":["cscott/zestjq"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/cscott/zestjq","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cscott%2Fzestjq","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cscott%2Fzestjq/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cscott%2Fzestjq/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cscott%2Fzestjq/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cscott","download_url":"https://codeload.github.com/cscott/zestjq/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cscott%2Fzestjq/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33626136,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-28T02:00:06.440Z","response_time":99,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":"2026-05-28T20:30:49.698Z","updated_at":"2026-05-28T20:30:49.785Z","avatar_url":"https://github.com/cscott.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Latest Stable Version]](https://packagist.org/packages/wikimedia/zest-jq) [![License]](https://packagist.org/packages/wikimedia/zest-jq)\n\nZestJQ\n======\n\nA PHP and TypeScript implementation of the [`jq`](https://jqlang.org/)\nJSON query language.  Provides both a library API and a `zestjq`\ncommand-line tool.  `ZestJQ` uses the same license as the original\n`jq` code (MIT).  We implement `jq` version 1.8.x (validated against\nupstream test cases as of May 2026).\n\nThis is not a port of the original C codebase, but a reimplementation\nusing the manual and the extensive `jq.test` file as a guide.\nClaude Sonnet 4.6 was used to speed portions of the implementation\nbut every line in this code was manually reviewed and I performed\nextensive clean up and refactoring on Claude's output.  (Claude\nbecame confused and began to call me \"the linter\" because I was always\naltering what it output.)\n\nClaude was a big help porting the numerous built-in functions in the\n`jq` standard library.  The date-parsing and other related functions\nimported from C would not be nearly as complete if I had to port these\nentirely by hand.  After the PHP implementation was substantially\ncomplete, Claude was used to assist the mostly-mechanical transformation\nfrom PHP to TypeScript, although again I reviewed every line and\nmade numerous refinements.\n\nThis implementation passes the upstream jq test suite (524 tests) with\nthe following exceptions:\n* JSON cannot represent NaN or infinity, and the PHP `json_decode` and\n  `json_encode` functions similarly refuse to emit or accept these\n  values.  Upstream `jq` uses an extended version of JSON to allow it\n  to parse and emit these values; we do not.\n* Similarly, we use IEEE floating point, as implemented by PHP, to\n  represent all values and arithmetic.  In some places upstream `jq`\n  uses extended precision: exact int64 for integers and support for\n  preserving input number literals exactly.  The PHP implementation\n  defines the `jq` built-ins `have_literal_numbers` and `have_decnum`\n  to `false` to reflect our implementation choices.\n* We don't implement the module-level directives `module`, `include`,\n  and `import`.\n* Our error message strings are consistent for most type checking\n  operations, and thus do not match upstream `jq` exactly.\n* The `debug` and `input` built-ins are not implemented, although\n  there is skeleton support for providing different IO contexts to\n  the evaluator.\n* We don't enforce JSON nesting and path depth limits, and our\n  recursive implementation may use more stack that upstream `jq`\n  for some operations.\n\nWe've also [fixed some bugs in delete-path\nsupport](https://github.com/jqlang/jq/issues/3538). Since PHP is a\nmemory-safe language, we expect that we do not have any memory\nerrors either.\n\nAdditional documentation can be found on\n[mediawiki.org](https://www.mediawiki.org/wiki/ZestJQ).\n\n\nPHP installation\n----------------\n\n```\ncomposer require wikimedia/zest-jq\n```\n\nPHP ≥ 8.1 is required. `ext-mbstring` must be enabled.\n\n\nPHP library usage\n-----------------\n\n### Evaluate a filter against a JSON string\n\n```php\nuse Wikimedia\\ZestJQ\\JQ;\n\n// evalString() returns a Generator that yields each output value.\nforeach ( JQ::evalString( '{\"name\":\"jq\",\"version\":2}', '.name' ) as $val ) {\n    echo $val; // \"jq\"\n}\n```\n\n### Evaluate a filter against a decoded PHP value\n\n```php\nuse Wikimedia\\ZestJQ\\JQ;\nuse Wikimedia\\ZestJQ\\JQUtils;\n\n// Use JQUtils::jsonDecode() to ensure objects are stdClass (not\n// arrays), and that all arrays are lists.\n$input = JQUtils::jsonDecode( '{\"items\":[1,2,3]}' );\n\nforeach ( JQ::eval( $input, '.items[]' ) as $val ) {\n    echo $val, \"\\n\"; // 1, 2, 3\n}\n```\n\n### Compile once, evaluate many times\n\n```php\nuse Wikimedia\\ZestJQ\\JQ;\n\n$filter = JQ::compile( '.[] | select(. \u003e 2)' );\n\nforeach ( $filter( [1, 2, 3, 4] ) as $val ) {\n    echo $val, \"\\n\"; // 3, 4\n}\nforeach ( $filter( [5, 1, 6] ) as $val ) {\n    echo $val, \"\\n\"; // 5, 6\n}\n```\n\n### Error handling\n\n```php\nuse Wikimedia\\ZestJQ\\JQ;\nuse Wikimedia\\ZestJQ\\JQError;\n\ntry {\n    foreach ( JQ::evalString( '\"hello\"', '.foo' ) as $val ) {\n        // ...\n    }\n} catch ( JQError $e ) {\n    echo $e-\u003egetMessage();\n}\n```\n\n### Custom definitions\n\n```php\nuse Wikimedia\\ZestJQ\\JQEnv;\nuse Wikimedia\\ZestJQ\\JQ;\n\n$env = JQEnv::getStdEnv()-\u003eextendEnv( 'def double: . * 2;' );\n\nforeach ( JQ::eval( 5, 'double', null, $env ) as $val ) {\n    echo $val; // 10\n}\n```\n\nRunning PHP tests\n-----------------\n\n```\ncomposer install\ncomposer test\n```\n\nIndividual test commands:\n\n```bash\n# PHPUnit only\nvendor/bin/phpunit\n\n# Single test file\nvendor/bin/phpunit tests/phpunit/JQCompileTest.php\n\n# Fix code style\ncomposer fix\n```\n\nTypeScript installation\n-----------------------\n\n```\nnpm install @wikimedia/zest-jq\n```\n\n\nTypeScript library usage (node)\n-------------------------------\n\n### Evaluate a filter against a JSON string\n\n```typescript\nimport { JQ } from '@wikimedia/zest-jq';\n\n// evalString() returns a Generator that yields each output value.\nfor ( const val of JQ.evalString( '{\"name\":\"jq\",\"version\":2}', '.name' ) ) {\n    console.log( val ); // \"jq\"\n}\n```\n\n### Evaluate a filter against a decoded value\n\n```typescript\nimport { JQ } from '@wikimedia/zest-jq';\n\nconst input = { items: [ 1, 2, 3 ] };\n\nfor ( const val of JQ.eval( input, '.items[]' ) ) {\n    console.log( val ); // 1, 2, 3\n}\n```\n\n### Compile once, evaluate many times\n\n```typescript\nimport { JQ } from '@wikimedia/zest-jq';\n\nconst filter = JQ.compile( '.[] | select(. \u003e 2)' );\n\nfor ( const val of filter( [ 1, 2, 3, 4 ] ) ) {\n    console.log( val ); // 3, 4\n}\nfor ( const val of filter( [ 5, 1, 6 ] ) ) {\n    console.log( val ); // 5, 6\n}\n```\n\n### Error handling\n\n```typescript\nimport { JQ, JQError } from '@wikimedia/zest-jq';\n\ntry {\n    for ( const val of JQ.evalString( '\"hello\"', '.foo' ) ) {\n        // ...\n    }\n} catch ( e ) {\n    if ( e instanceof JQError ) {\n        console.error( e.message );\n    }\n}\n```\n\n\nTypeScript library usage (browser)\n----------------------------------\n\nBuild the browser bundle from the project root:\n\n```bash\nfresh-node -- npm run build:browser\n```\n\nThis produces three files in `dist/browser/`:\n- `zestjq.iife.js` — unminified IIFE bundle (for debugging)\n- `zestjq.iife.min.js` — minified IIFE bundle (recommended for production)\n- `zestjq.esm.js` — ES module bundle (for use with `\u003cscript type=\"module\"\u003e`)\n\n### Via `\u003cscript\u003e` tag (IIFE)\n\nThe IIFE bundle exposes all exports as properties of `window.ZestJQ`:\n\n```html\n\u003cscript src=\"zestjq.iife.min.js\"\u003e\u003c/script\u003e\n\u003cscript\u003e\nconst { JQ, JQError } = ZestJQ;\n\nfor ( const val of JQ.evalString( '{\"name\":\"jq\"}', '.name' ) ) {\n    console.log( val ); // \"jq\"\n}\n\u003c/script\u003e\n```\n\n### Via ES module\n\n```html\n\u003cscript type=\"module\"\u003e\nimport { JQ, JQError } from './zestjq.esm.js';\n\nfor ( const val of JQ.evalString( '{\"name\":\"jq\"}', '.name' ) ) {\n    console.log( val ); // \"jq\"\n}\n\u003c/script\u003e\n```\n\n### Compile once, evaluate many times (browser)\n\n```html\n\u003cscript type=\"module\"\u003e\nimport { JQ } from './zestjq.esm.js';\n\nconst filter = JQ.compile( '.[] | select(. \u003e 2)' );\n\nfor ( const val of filter( [ 1, 2, 3, 4 ] ) ) {\n    console.log( val ); // 3, 4\n}\n\u003c/script\u003e\n```\n\n\nRunning TypeScript tests\n------------------------\n\n```bash\nfresh-node -- npm test\n```\n\n\nCommand-line tool\n-----------------\nOur command-line tool is compatible with the upstream `jq` binary,\nalthough we do not implement many command-line options.\n\n```\nzestjq [options] \u003cfilter\u003e [file ...]\n```\n\n| Option | Description |\n|--------|-------------|\n| `-n`, `--null-input` | Use `null` as the input instead of reading stdin/files |\n| `-r`, `--raw-output` | Print strings without JSON quoting |\n| `-c`, `--compact-output` | Compact JSON output (no pretty-printing) |\n| `--ast` | Print the parsed AST of the filter and exit |\n\n**Examples:**\n\n```bash\n# Field access\necho '{\"name\":\"world\"}' | zestjq '.name'\n# → \"world\"\n\n# Arithmetic with null input\nzestjq -n '1 + 1'\n# → 2\n\n# Raw string output\necho '\"hello\"' | zestjq -r '.'\n# → hello\n\n# Compact output\necho '[1,2,3]' | zestjq -c 'map(. * 2)'\n# → [2,4,6]\n\n# Multiple outputs\necho 'null' | zestjq -n '1, 2, 3'\n# → 1\n# → 2\n# → 3\n```\n\n\nCookbook\n--------\n\nCommon query patterns using a classic store inventory document.\n\n```json\n{\n  \"store\": {\n    \"book\": [\n      { \"category\": \"reference\", \"author\": \"Nigel Rees\",\n        \"title\": \"Sayings of the Century\", \"price\": 8.95 },\n      { \"category\": \"fiction\",   \"author\": \"Evelyn Waugh\",\n        \"title\": \"Sword of Honour\",        \"price\": 12.99 },\n      { \"category\": \"fiction\",   \"author\": \"Herman Melville\",\n        \"title\": \"Moby Dick\", \"isbn\": \"0-553-21311-3\", \"price\": 8.99 }\n    ],\n    \"bicycle\": { \"color\": \"red\", \"price\": 19.95 }\n  }\n}\n```\n\nSetup — replace `$json` / `json` with the JSON string above:\n\n```bash\nSTORE='{\"store\":{\"book\":[{\"category\":\"reference\",\"author\":\"Nigel Rees\",\"title\":\"Sayings of the Century\",\"price\":8.95},{\"category\":\"fiction\",\"author\":\"Evelyn Waugh\",\"title\":\"Sword of Honour\",\"price\":12.99},{\"category\":\"fiction\",\"author\":\"Herman Melville\",\"title\":\"Moby Dick\",\"isbn\":\"0-553-21311-3\",\"price\":8.99}],\"bicycle\":{\"color\":\"red\",\"price\":19.95}}}'\n```\n\n```php\n/* PHP */\nuse Wikimedia\\ZestJQ\\JQ;\nuse Wikimedia\\ZestJQ\\JQUtils;\n$store = JQUtils::jsonDecode( $json );\n```\n\n```typescript\n/* JavaScript */\nimport { JQ } from '@wikimedia/zest-jq';\nconst store = JSON.parse( json );\n```\n\n**Get all authors:**\n\n```bash\necho \"$STORE\" | zestjq -c '[.store.book[].author]'\n# → [\"Nigel Rees\",\"Evelyn Waugh\",\"Herman Melville\"]\n```\n\n```php\n/* PHP */\nforeach ( JQ::eval( $store, '.store.book[].author' ) as $val ) {\n    var_export( $val ); echo \"\\n\";\n}\n// → 'Nigel Rees'\n// → 'Evelyn Waugh'\n// → 'Herman Melville'\n```\n\n```typescript\n/* JavaScript */\nfor ( const val of JQ.eval( store, '.store.book[].author' ) ) {\n    console.log( val );\n}\n// → Nigel Rees\n// → Evelyn Waugh\n// → Herman Melville\n```\n\n**Get the first book's title:**\n\n```bash\necho \"$STORE\" | zestjq '.store.book[0].title'\n# → \"Sayings of the Century\"\n```\n\n```php\n/* PHP */\nvar_export( JQ::eval( $store, '.store.book[0].title' )-\u003ecurrent() );\n// → 'Sayings of the Century'\n```\n\n```typescript\n/* JavaScript */\nconst [val] = JQ.eval( store, '.store.book[0].title' );\nconsole.log( val );\n// → Sayings of the Century\n```\n\n**Every `price` field at any nesting depth:**\n\n```bash\necho \"$STORE\" | zestjq -c '[.. | .price? // empty]'\n# → [8.95,12.99,8.99,19.95]\n```\n\n```php\n/* PHP */\nforeach ( JQ::eval( $store, '.. | .price? // empty' ) as $val ) {\n    var_export( $val ); echo \"\\n\";\n}\n// → 8.95\n// → 12.99\n// → 8.99\n// → 19.95\n```\n\n```typescript\n/* JavaScript */\nfor ( const val of JQ.eval( store, '.. | .price? // empty' ) ) {\n    console.log( val );\n}\n// → 8.95\n// → 12.99\n// → 8.99\n// → 19.95\n```\n\n**Books cheaper than $10:**\n\n```bash\necho \"$STORE\" | zestjq -c '[.store.book[] | select(.price \u003c 10)]'\n# → [{\"category\":\"reference\",\"author\":\"Nigel Rees\",\"title\":\"Sayings of the Century\",\"price\":8.95},\n# →  {\"category\":\"fiction\",\"author\":\"Herman Melville\",\"title\":\"Moby Dick\",\"isbn\":\"0-553-21311-3\",\"price\":8.99}]\n```\n\n```php\n/* PHP */\nforeach ( JQ::eval( $store, '.store.book[] | select(.price \u003c 10)' ) as $val ) {\n    var_export( $val ); echo \"\\n\";\n}\n// → (object) array(\n// →    'category' =\u003e 'reference',\n// →    'author' =\u003e 'Nigel Rees',\n// →    'title' =\u003e 'Sayings of the Century',\n// →    'price' =\u003e 8.95,\n// → )\n// → (object) array(\n// →    'category' =\u003e 'fiction',\n// →    'author' =\u003e 'Herman Melville',\n// →    'title' =\u003e 'Moby Dick',\n// →    'isbn' =\u003e '0-553-21311-3',\n// →    'price' =\u003e 8.99,\n// → )\n```\n\n```typescript\n/* JavaScript */\nfor ( const val of JQ.eval( store, '.store.book[] | select(.price \u003c 10)' ) ) {\n    console.log( val );\n}\n// → {\n// →   category: 'reference',\n// →   author: 'Nigel Rees',\n// →   title: 'Sayings of the Century',\n// →   price: 8.95\n// → }\n// → {\n// →   category: 'fiction',\n// →   author: 'Herman Melville',\n// →   title: 'Moby Dick',\n// →   isbn: '0-553-21311-3',\n// →   price: 8.99\n// → }\n```\n\n**Books that have an ISBN:**\n\n```bash\necho \"$STORE\" | zestjq -c '[.store.book[] | select(has(\"isbn\"))]'\n# → [{\"category\":\"fiction\",\"author\":\"Herman Melville\",\"title\":\"Moby Dick\",\"isbn\":\"0-553-21311-3\",\"price\":8.99}]\n```\n\n```php\n/* PHP */\nforeach ( JQ::eval( $store, '.store.book[] | select(has(\"isbn\"))' ) as $val ) {\n    var_export( $val ); echo \"\\n\";\n}\n// → (object) array(\n// →    'category' =\u003e 'fiction',\n// →    'author' =\u003e 'Herman Melville',\n// →    'title' =\u003e 'Moby Dick',\n// →    'isbn' =\u003e '0-553-21311-3',\n// →    'price' =\u003e 8.99,\n// → )\n```\n\n```typescript\n/* JavaScript */\nfor ( const val of JQ.eval( store, '.store.book[] | select(has(\"isbn\"))' ) ) {\n    console.log( val );\n}\n// → {\n// →   category: 'fiction',\n// →   author: 'Herman Melville',\n// →   title: 'Moby Dick',\n// →   isbn: '0-553-21311-3',\n// →   price: 8.99\n// → }\n```\n\n**First two books:**\n\n```bash\necho \"$STORE\" | zestjq -c '.store.book[:2]'\n# → [{\"category\":\"reference\",\"author\":\"Nigel Rees\",\"title\":\"Sayings of the Century\",\"price\":8.95},\n# →  {\"category\":\"fiction\",\"author\":\"Evelyn Waugh\",\"title\":\"Sword of Honour\",\"price\":12.99}]\n```\n\n```php\n/* PHP */\nvar_export( JQ::eval( $store, '.store.book[:2]' )-\u003ecurrent() );\n// → array (\n// →   0 =\u003e\n// →   (object) array(\n// →      'category' =\u003e 'reference',\n// →      'author' =\u003e 'Nigel Rees',\n// →      'title' =\u003e 'Sayings of the Century',\n// →      'price' =\u003e 8.95,\n// →   ),\n// →   1 =\u003e\n// →   (object) array(\n// →      'category' =\u003e 'fiction',\n// →      'author' =\u003e 'Evelyn Waugh',\n// →      'title' =\u003e 'Sword of Honour',\n// →      'price' =\u003e 12.99,\n// →   ),\n// → )\n```\n\n```typescript\n/* JavaScript */\nconst [val] = JQ.eval( store, '.store.book[:2]' );\nconsole.log( val );\n// → [\n// →   {\n// →     category: 'reference',\n// →     author: 'Nigel Rees',\n// →     title: 'Sayings of the Century',\n// →     price: 8.95\n// →   },\n// →   {\n// →     category: 'fiction',\n// →     author: 'Evelyn Waugh',\n// →     title: 'Sword of Honour',\n// →     price: 12.99\n// →   }\n// → ]\n```\n\n**First and last book:**\n\n```bash\necho \"$STORE\" | zestjq -c '.store.book[0,-1]'\n# → {\"category\":\"reference\",\"author\":\"Nigel Rees\",\"title\":\"Sayings of the Century\",\"price\":8.95}\n# → {\"category\":\"fiction\",\"author\":\"Herman Melville\",\"title\":\"Moby Dick\",\"isbn\":\"0-553-21311-3\",\"price\":8.99}\n```\n\n```php\n/* PHP */\nforeach ( JQ::eval( $store, '.store.book[0,-1]' ) as $val ) {\n    var_export( $val ); echo \"\\n\";\n}\n// → (object) array(\n// →    'category' =\u003e 'reference',\n// →    'author' =\u003e 'Nigel Rees',\n// →    'title' =\u003e 'Sayings of the Century',\n// →    'price' =\u003e 8.95,\n// → )\n// → (object) array(\n// →    'category' =\u003e 'fiction',\n// →    'author' =\u003e 'Herman Melville',\n// →    'title' =\u003e 'Moby Dick',\n// →    'isbn' =\u003e '0-553-21311-3',\n// →    'price' =\u003e 8.99,\n// → )\n```\n\n```typescript\n/* JavaScript */\nfor ( const val of JQ.eval( store, '.store.book[0,-1]' ) ) {\n    console.log( val );\n}\n// → {\n// →   category: 'reference',\n// →   author: 'Nigel Rees',\n// →   title: 'Sayings of the Century',\n// →   price: 8.95\n// → }\n// → {\n// →   category: 'fiction',\n// →   author: 'Herman Melville',\n// →   title: 'Moby Dick',\n// →   isbn: '0-553-21311-3',\n// →   price: 8.99\n// → }\n```\n\n\nHistory\n-------\nUpstream `jq` was created by Stephen Dolan and is currently maintained\nby the [jqlang](https://github.com/jqlang/jq) community.\n\nZestJQ was originally implemented by C. Scott Ananian.\n\nFor version history since the original implementation,\nsee [HISTORY.md](HISTORY.md).\n\n## License and Credits\n\n`jq` is copyright (C) 2012 Stephen Dolan and contributors.\nZestJQ is a clean reimplementation in PHP and does not incorporate\nthe original C source code, but it does include `src/builtin.jq`\nand `tests/jq.test` from the upstream jq project.\n\nThe PHP implementation is copyright (C) 2026 Wikimedia Foundation.\n\nBoth the original jq codebase and this implementation are distributed\nunder the MIT license; see [LICENSE](LICENSE) for details.\n\n---\n[Latest Stable Version]: https://poser.pugx.org/wikimedia/zest-jq/v/stable.svg\n[License]: https://poser.pugx.org/wikimedia/zest-jq/license.svg\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcscott%2Fzestjq","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcscott%2Fzestjq","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcscott%2Fzestjq/lists"}