Metadata-Version: 2.1
Name: jque
Version: 0.1.3
Summary: Query JSON in memory as though it were a Mongo database.
Home-page: https://github.com/j6k4m8/jque
Author: Jordan Matelsky
Author-email: opensource@matelsky.com
License: MIT
Platform: UNKNOWN
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.6
Requires-Python: >=3.6.0
Description-Content-Type: text/markdown
Provides-Extra: dev
Requires-Dist: deco
Provides-Extra: dev
Requires-Dist: pytest; extra == 'dev'
Requires-Dist: pylint; extra == 'dev'

<h2 align=center>j q u e</h2>
<p align=center>Query JSON in memory as though it were a Mongo database</p>
<p align=center><a href="https://pypi.org/project/jque/"><img src="https://img.shields.io/pypi/v/jque.svg" /></a> <a href="https://circleci.com/gh/j6k4m8/jque"><img src="https://img.shields.io/circleci/project/github/RedSparr0w/node-csgo-parser.svg" /></a> <img src="https://img.shields.io/badge/extremely_rad-%F0%9F%A4%99-blue.svg" /> <img src="https://img.shields.io/github/license/j6k4m8/jque.svg" /><a href="https://codecov.io/gh/j6k4m8/jque">
  <img src="https://codecov.io/gh/j6k4m8/jque/branch/master/graph/badge.svg" />
</a></p>

## Installation

```shell
pip3 install jque
```

## Usage

```python
import jque
```

`jque` accepts a variety of inputs to the constructor.

Pass a list of dicts:
```python
data = jque.jque([
    { "name": "john" }, 
    { "name": "paul" }, 
    { "name": "george" }, 
    { "name": "ringo" }
])
```

Pass a JSON filename:
```python
DATAFILE = "~/my/big/data.json"
data = jque.jque(DATAFILE)
```

Now you can query this dataset using Mongo-like syntax:

```python
>>> data.query({ "name": {"$neq": "paul"} })
[
    { "name": "john" },
    { "name": "george" }, 
    { "name": "ringo" }
]
```

### Arguments to `query`:

| Arg | Description |
|-----|-------------|
| `wrap` (`boolean` : `True`) | Whether to wrap the resultant dataset in a new `jque` object. This allows chaining, like `jque.query(...).query(...)`, if you're the sort of person to do that. Pass `False` to get back a `list` instead. |


### Another example!

```python
data = jque.jque([{
    "_id": "ABC",
    "name": "Arthur Dent",
    "age": 42,
    "current_planet": "earth"
}, {
    "_id": "DE2",
    "name": "Penny Lane",
    "age": 19,
    "current_planet": "earth"
}, {
    "_id": "123",
    "name": "Ford Prefect",
    "age": 240,
    "current_planet": "Brontitall"
}])
```

```python
teenage_earthlings = data.query({
    "current_planet": {"$eq": "earth"},
    "age": { "$lte": 20, "$gte": 10 }
})
```

Which returns:

```python
[{
    "_id": "DE2",
    "name": "Penny Lane",
    "age": 19,
    "current_planet": "earth"
}]
```


Use Python lambdas as a filter:

```python
>>> libraries = jque.jque([
...     {"name": "jque", "language": "Python"}, 
...     {"name": "react", "language": "node"}
... ])
>>> list(libraries.query({
...     'language': lambda x: x[:2] == "Py"
... }))
[{"name": "jque", "language": "Python"}]
```



