--- acl_categories: - '@json' - '@write' - '@slow' arguments: - name: key type: key - arguments: - name: path type: string - name: index optional: true type: integer name: path optional: true type: block categories: - docs - develop - stack - oss - rs - rc - oss - kubernetes - clients complexity: O(N) when path is evaluated to a single value where N is the size of the array and the specified index is not the last element, O(1) when path is evaluated to a single value and the specified index is the last element, or O(N) when path is evaluated to multiple values, where N is the size of the key description: Removes and returns the element at the specified index in the array at path group: json hidden: false linkTitle: JSON.ARRPOP module: JSON railroad_diagram: /images/railroad/json.arrpop.svg since: 1.0.0 stack_path: docs/data-types/json summary: Removes and returns the element at the specified index in the array at path syntax_fmt: JSON.ARRPOP key [path [index]] title: JSON.ARRPOP --- Remove and return an element from the index in the array [Examples](#examples) ## Required arguments
key is key to modify.
index is position in the array to start popping from. Default is `-1`, meaning the last element. Out-of-range indexes round to their respective array ends. Popping an empty array returns null.
## Optional arguments
path is JSONPath to specify. Default is root `$`.
## Examples
Pop a value from an index and insert a new value Create two headphone products with maximum sound levels. {{< highlight bash >}} redis> JSON.SET key $ '[{"name":"Healthy headphones","description":"Wireless Bluetooth headphones with noise-cancelling technology","connection":{"wireless":true,"type":"Bluetooth"},"price":99.98,"stock":25,"colors":["black","silver"],"max_level":[60,70,80]},{"name":"Noisy headphones","description":"Wireless Bluetooth headphones with noise-cancelling technology","connection":{"wireless":true,"type":"Bluetooth"},"price":99.98,"stock":25,"colors":["black","silver"],"max_level":[80,90,100,120]}]' OK {{< / highlight >}} Get all maximum values for the second product. {{< highlight bash >}} redis> JSON.GET key $.[1].max_level "[[80,90,100,120]]" {{< / highlight >}} Update the `max_level` field of the product: remove an unavailable value and add a newly available value. {{< highlight bash >}} redis> JSON.ARRPOP key $.[1].max_level 0 1) "80" {{< / highlight >}} Get the updated array. {{< highlight bash >}} redis> JSON.GET key $.[1].max_level "[[90,100,120]]" {{< / highlight >}} Now insert a new lowest value. {{< highlight bash >}} redis> JSON.ARRINSERT key $.[1].max_level 0 85 1) (integer) 4 {{< / highlight >}} Get the updated array. {{< highlight bash >}} redis> JSON.GET key $.[1].max_level "[[85,90,100,120]]" {{< / highlight >}}
## Redis Software and Redis Cloud compatibility | Redis
Software | Redis
Cloud | Notes | |:----------------------|:-----------------|:------| | ✅ Supported
| ✅ Flexible & Annual
✅ Free & Fixed | | ## Return information {{< multitabs id="json-arrpop-return-info" tab1="RESP2" tab2="RESP3" >}} [Array reply]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of [bulk string replies]({{< relref "/develop/reference/protocol-spec#bulk-strings" >}}) or [null replies]({{< relref "/develop/reference/protocol-spec#nulls" >}}), where each element is the popped JSON value as a string, or `null` if the matching value is not an array. -tab-sep- [Array reply]({{< relref "/develop/reference/protocol-spec#arrays" >}}) of [bulk string replies]({{< relref "/develop/reference/protocol-spec#bulk-strings" >}}) or [null replies]({{< relref "/develop/reference/protocol-spec#nulls" >}}), where each element is the popped JSON value as a string, or `null` if the matching value is not an array. {{< /multitabs >}} ## See also [`JSON.ARRAPPEND`]({{< relref "commands/json.arrappend/" >}}) | [`JSON.ARRINDEX`]({{< relref "commands/json.arrindex/" >}}) ## Related topics * [RedisJSON]({{< relref "/develop/data-types/json/" >}}) * [Index and search JSON documents]({{< relref "/develop/ai/search-and-query/indexing/" >}})