[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/redis/NRedisStack/master/Examples/AdvancedJsonExamples.md [Back]  [Original]

# Advanced JSON

Redis JSON array filtering examples

## Contents

1. [Business Value Statement](#value)
2. [Data Set](#dataset)
3. [Data Loading](#dataload)
4. [Array Filtering Examples](#arrayfiltering)
    1. [All Properties of Array](#allprops)
    2. [All Properties of a Field](#allfield)
    3. [Relational - Equality](#equality)
    4. [Relational - Less Than](#lessthan)
    5. [Relational - Greater Than or Equal](#greaterthan)
    6. [Logical AND](#logicaland)
    7. [Logical OR](#logicalor)
    8. [Regex - Contains Exact](#regex_exact)
    9. [Regex - Contains, Case Insensitive](#regex_contains)
    10. [Regex - Begins With](#regex_begins)

## Business Value Statement 

The ability to query within a JSON object unlocks further value to the underlying data.  Redis supports JSONPath array filtering natively.

## Data Set 

```JSON
{
    "city": "Boston",
    "location": "42.361145, -71.057083",
    "inventory": [
        {
            "id": 15970,
            "gender": "Men",
            "season":["Fall", "Winter"],
            "description": "Turtle Check Men Navy Blue Shirt",
            "price": 34.95
        },
        {
            "id": 59263,
            "gender": "Women",
            "season": ["Fall", "Winter", "Spring", "Summer"],
            "description": "Titan Women Silver Watch",
            "price": 129.99
        },
        {
            "id": 46885,
            "gender": "Boys",
            "season": ["Fall"],
            "description": "Ben 10 Boys Navy Blue Slippers",
            "price": 45.99
        }
    ]
}
```

## Data Loading 

```c#
JsonCommands json = db.JSON();
json.Set("warehouse:1", "$", new {
    city = "Boston",
    location = "42.361145, -71.057083",
    inventory = new[] {
        new {
            id = 15970,
            gender = "Men",
            season = new[] {"Fall", "Winter"},
            description = "Turtle Check Men Navy Blue Shirt",
            price = 34.95
        },
        new {
            id = 59263,
            gender = "Women",
            season = new[] {"Fall", "Winter", "Spring", "Summer"},
            description = "Titan Women Silver Watch",
            price = 129.99
        },
        new {
            id = 46885,
            gender = "Boys",
            season = new[] {"Fall"},
            description =  "Ben 10 Boys Navy Blue Slippers",
            price = 45.99
        }
    }
});
```

## Array Filtering Examples 

### Syntax

[JSON.GET](https://redis.io/commands/json.get/)

### All Properties of Array 

Fetch all properties of an array.

#### Command

```c#
Console.WriteLine(json.Get(key: "warehouse:1",
    path: "$.inventory[*]",
    indent: "\t",
    newLine: "\n"
));
```

#### Result

```json
[
        {
                "id":15970,
                "gender":"Men",
                "season":[
                        "Fall",
                        "Winter"
                ],
                "description":"Turtle Check Men Navy Blue Shirt",
                "price":34.95
        },
        {
                "id":59263,
                "gender":"Women",
                "season":[
                        "Fall",
                        "Winter",
                        "Spring",
                        "Summer"
                ],
                "description":"Titan Women Silver Watch",
                "price":129.99
        },
        {
                "id":46885,
                "gender":"Boys",
                "season":[
                        "Fall"
                ],
                "description":"Ben 10 Boys Navy Blue Slippers",
                "price":45.99
        }
]
```

### All Properties of a Field 

Fetch all values of a field within an array.

#### Command

```c#
Console.WriteLine(json.Get(key: "warehouse:1",
    path: "$.inventory[*].price",
    indent: "\t",
    newLine: "\n"
));
```

#### Result

```json
[
        34.95,
        129.99,
        45.99
]
```

### Relational - Equality 

Fetch all items within an array where a text field matches a given value.

#### Command

```c#
Console.WriteLine(json.Get(key: "warehouse:1",
    path: "$.inventory[?(@.description==\"Turtle Check Men Navy Blue Shirt\")]",
    indent: "\t",
    newLine: "\n"
));
```

#### Result

```json
[
        {
                "id":15970,
                "gender":"Men",
                "season":[
                        "Fall",
                        "Winter"
                ],
                "description":"Turtle Check Men Navy Blue Shirt",
                "price":34.95
        }
]
```

### Relational - Less Than 

Fetch all items within an array where a numeric field is less than a given value.

#### Command

```c#
Console.WriteLine(json.Get(key: "warehouse:1",
    path: "$.inventory[?(@.price=20000)]",
    indent: "\t",
    newLine: "\n"
));
```

#### Result

```json
[
        {
                "id":59263,
                "gender":"Women",
                "season":[
                        "Fall",
                        "Winter",
                        "Spring",
                        "Summer"
                ],
                "description":"Titan Women Silver Watch",
                "price":129.99
        },
        {
                "id":46885,
                "gender":"Boys",
                "season":[
                        "Fall"
                ],
                "description":"Ben 10 Boys Navy Blue Slippers",
                "price":45.99
        }
]
```

### Logical AND 

Fetch all items within an array that meet two relational operations.

#### Command

```c#
Console.WriteLine(json.Get(key: "warehouse:1",
    path: "$.inventory[?(@.gender==\"Men\"&&@.price>20)]",
    indent: "\t",
    newLine: "\n"
));
```

#### Result

```json
[
        {
                "id":15970,
                "gender":"Men",
                "season":[
                        "Fall",
                        "Winter"
                ],
                "description":"Turtle Check Men Navy Blue Shirt",
                "price":34.95
        }
]
```

### Logical OR 

Fetch all items within an array that meet at least one relational operation.  In this case, return only the ids of those items.

#### Command

```c#
Console.WriteLine(json.Get(key: "warehouse:1",
    path: "$.inventory[?(@.price

Web Proxy Viewer  |  New URL  |  Original Page