# jaycue
**Repository Path**: iamfat/jaycue
## Basic Information
- **Project Name**: jaycue
- **Description**: My little side project that mimics the best parts jq https://stedolan.github.io/jq/
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2022-02-09
- **Last Updated**: 2022-02-09
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
[](https://www.npmjs.com/package/jaycue)
[](https://www.npmjs.com/package/jaycue?activeTab=dependents)
[](https://www.npmjs.com/package/jaycue)
[](https://repl.it/github/olore/jaycue)
jaycue is my little side project that mimics the best parts [jq](https://stedolan.github.io/jq/) in pure JavaScript. I wrote a blog post about it on [dev.to](https://dev.to/olore/introducing-jaycue-jq-in-your-js-1c1o)
I am TDD'ing this to get some practice, using the [jq documentation](https://stedolan.github.io/jq/manual/#Basicfilters), and hopefully make something useful. Please see below for some similar, more mature, great projects built around `jq`.
## Install
```console
$ npm install jaycue
```
## Usage
```js
const jq = require('jaycue');
console.log(jq({foo: 123}, '.foo'));
123
```
## Supported Filters
### Basic Filters
```javascript
{
"value": 42,
"text": "less interesting data",
"name": {
"first": "Brian"
"last": "Olore"
}
}
```
filter | output
--------------- | ------
`.` | `{ "value": 42, "text": "less interesting data","name": { "first": "Brian" "last": "Olore" } }` (object)
`.value` | `42` (number)
`.text` | `less interesting data` (string)
`.["text"]` | `less interesting data` (string)
`.name` | `"name": { "first": "Brian" "last": "Olore" }` (object)
`.name.first` | `Brian` (string)
`.missing` | `undefined`
`.missing?` | `null`
`.["missing"]?` | `null`
### Array Filters
```javascript
["a","b","c","d","e"];
```
filter | output
------ | ------
`.[]` | `"a","b","c","d","e"` (not json)
`.[0]` | `a`
`.[-2]` | `d`
### Array Slicing Filters
filter | output
-------- | ------
`.[2:4]` | `["c", "d"]`
`.[:3]` | `["a", "b", "c"]`
`.[:-3]` | `["a", "b"]`
`.[-2:]` | `["d", "e"]`
`.[2:]` | `["c", "d", "e"]`
### Select Function
```javascript
[
{"id": "first", "val": 1},
{"id": "second", "val": 2}
]
```
filter | output
----------------------------------- | -------------------
`.[] \| select(.id == "second")` | `{"id": "second", "val": 2}`
`.[] \| select(.id == "second") \| .val` | `2` (number)
`.[] \| select(.id == "second") .val` | `2` (number)
`.[] \| select(.id != "second") .val` | `1` (number)
## Testing
~~Must have `jq` installed to run tests~~
`jq` is now supplied by [node-jq](https://npmjs.org/package/node-jq)
As previously mentioned, all code has been test-driven. The test-helper provides a way to call the actual `jq`, making it easy to compare results.
Running tests
```shell script
npm test
```
## Notes
Read the [jq Language Description](https://github.com/stedolan/jq/wiki/jq-Language-Description)
Check out this project which is a JavaScript wrapper around jq: https://github.com/sanack/node-jq. Here are some more cool jq projects: https://github.com/fiatjaf/awesome-jq
## Thanks
* Logo by Joseph Olore