

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Perintah Valkey dan Redis OSS yang didukung
<a name="json-list-commands"></a>

ElastiCache mendukung perintah Valkey dan Redis OSS JSON berikut:

**Topics**
+ [JSON.ARRAPPEND](json-arrappend.md)
+ [JSON.ARRINDEX](json-arrindex.md)
+ [JSON.ARRINSERT](json-arrinsert.md)
+ [JSON.ARRLEN](json-arrlen.md)
+ [JSON.ARRPOP](json-arrpop.md)
+ [JSON.ARRTRIM](json-arrtrim.md)
+ [JSON.CLEAR](json-clear.md)
+ [JSON.DEBUG](json-debug.md)
+ [JSON.DEL](json-del.md)
+ [JSON.FORGET](json-forget.md)
+ [JSON.GET](json-get.md)
+ [JSON.MGET](json-mget.md)
+ [JSON.MSET](json-mset.md)
+ [JSON.NUMINCRBY](json-numincrby.md)
+ [JSON.NUMMULTBY](json-nummultby.md)
+ [JSON.OBJLEN](json-objlen.md)
+ [JSON.OBJKEYS](json-objkeys.md)
+ [JSON.RESP](json-resp.md)
+ [JSON.SET](json-set.md)
+ [JSON.STRAPPEND](json-strappend.md)
+ [JSON.STRLEN](json-strlen.md)
+ [JSON.TOGGLE](json-toggle.md)
+ [JSON.TYPE](json-type.md)

# JSON.ARRAPPEND
<a name="json-arrappend"></a>

Menambahkan satu atau beberapa nilai ke nilai array di jalur.

Sintaksis

```
JSON.ARRAPPEND <key> <path> <json> [json ...]
```
+ kunci (wajib) - Kunci Valkey atau Redis OSS dari jenis dokumen JSON.
+ jalur (wajib) – Sebuah jalur JSON.
+ json (wajib) - Nilai JSON yang akan ditambahkan ke array.

**Nilai yang ditampilkan**

Jika jalur adalah sintaksis yang ditingkatkan:
+ Array integer yang merepresentasikan panjang baru array di setiap jalur.
+ Jika nilai bukan array, nilai yang akan dikembalikan adalah kosong.
+ Kesalahan `NONEXISTENT` jika jalur tidak ada.

Jika jalur adalah sintaksis terbatas:
+ Integer, panjang baru array.
+ Jika beberapa nilai array dipilih, perintah mengembalikan panjang baru dari array yang diperbarui pertama.
+ Kesalahan `WRONGTYPE` jika nilai di jalur bukan array.
+ Kesalahan `SYNTAXERR` jika salah satu argumen input json bukan string JSON yang valid.
+ Kesalahan `NONEXISTENT` jika jalur tidak ada.

**Contoh**

 Sintaksis jalur yang ditingkatkan:

```
127.0.0.1:6379> JSON.SET k1 . '[[], ["a"], ["a", "b"]]'
OK
127.0.0.1:6379> JSON.ARRAPPEND  k1 $[*] '"c"'
1) (integer) 1
2) (integer) 2
3) (integer) 3
127.0.0.1:6379> JSON.GET k1
"[[\"c\"],[\"a\",\"c\"],[\"a\",\"b\",\"c\"]]"
```

 Sintaksis jalur terbatas:

```
127.0.0.1:6379> JSON.SET k1 . '[[], ["a"], ["a", "b"]]'
OK
127.0.0.1:6379> JSON.ARRAPPEND  k1 [-1] '"c"'
(integer) 3
127.0.0.1:6379> JSON.GET k1
"[[],[\"a\"],[\"a\",\"b\",\"c\"]]"
```

# JSON.ARRINDEX
<a name="json-arrindex"></a>

Mencari kemunculan pertama dari nilai JSON skalar dalam array di jalur.
+ Kesalahan di luar jangkauan diatasi dengan membulatkan indeks ke awal dan akhir array.
+ Jika awal > akhir, mengembalikan -1 (tidak ditemukan).

Sintaksis

```
JSON.ARRINDEX <key> <path> <json-scalar> [start [end]]
```
+ kunci (wajib) - Kunci Valkey atau Redis OSS dari jenis dokumen JSON.
+ jalur (wajib) – Sebuah jalur JSON.
+ json-skalar (wajib) - Nilai skalar yang dicari. Skalar JSON mengacu pada nilai yang bukan merupakan objek atau array. Artinya, string, angka, Boolean, dan kosong (null) adalah nilai skalar.
+ awal (opsional) – Indeks awal, inklusif. Default ke 0 jika tidak disediakan.
+ akhir (opsional) - Indeks akhir, eksklusif. Default ke 0 jika tidak disediakan, yang berarti bahwa elemen terakhir disertakan. 0 atau -1 berarti elemen terakhir disertakan.

**Nilai yang ditampilkan**

Jika jalur adalah sintaksis yang ditingkatkan:
+ Array integer. Setiap nilai adalah indeks dari elemen yang cocok dalam array di jalur. Nilainya -1 jika tidak ditemukan.
+ Jika nilai bukan array, nilai yang akan dikembalikan adalah kosong.

Jika jalur adalah sintaksis terbatas:
+ Integer, indeks elemen yang cocok, atau -1 jika tidak ditemukan.
+ Kesalahan `WRONGTYPE` jika nilai di jalur bukan array.

**Contoh**

 Sintaksis jalur yang ditingkatkan:

```
127.0.0.1:6379> JSON.SET k1 . '[[], ["a"], ["a", "b"], ["a", "b", "c"]]'
OK
127.0.0.1:6379> JSON.ARRINDEX k1 $[*] '"b"'
1) (integer) -1
2) (integer) -1
3) (integer) 1
4) (integer) 1
```

 Sintaksis jalur terbatas:

```
127.0.0.1:6379> JSON.SET k1 . '{"children": ["John", "Jack", "Tom", "Bob", "Mike"]}'
OK
127.0.0.1:6379> JSON.ARRINDEX k1 .children '"Tom"'
(integer) 2
```

# JSON.ARRINSERT
<a name="json-arrinsert"></a>

Menyisipkan satu atau beberapa nilai ke dalam nilai array di jalur sebelum indeks.

Sintaksis

```
JSON.ARRINSERT <key> <path> <index> <json> [json ...]
```
+ kunci (wajib) - Kunci Valkey atau Redis OSS dari jenis dokumen JSON.
+ jalur (wajib) – Sebuah jalur JSON.
+ index (wajib) – Sebuah indeks array yang dimasukkan setelah nilai.
+ json (wajib) - Nilai JSON yang akan ditambahkan ke array.

**Nilai yang ditampilkan**

Jika jalur adalah sintaksis yang ditingkatkan:
+ Array integer yang merepresentasikan panjang baru array di setiap jalur.
+ Jika nilai adalah array kosong, nilai yang akan dikembalikan adalah kosong.
+ Jika nilai bukan array, nilai yang akan dikembalikan adalah kosong.
+ Kesalahan `OUTOFBOUNDARIES` jika argumen indeks di luar batas.

Jika jalur adalah sintaksis terbatas:
+ Integer, panjang baru array.
+ Kesalahan `WRONGTYPE` jika nilai di jalur bukan array.
+ Kesalahan `OUTOFBOUNDARIES` jika argumen indeks di luar batas.

**Contoh**

 Sintaksis jalur yang ditingkatkan:

```
127.0.0.1:6379> JSON.SET k1 . '[[], ["a"], ["a", "b"]]'
OK
127.0.0.1:6379> JSON.ARRINSERT k1 $[*] 0 '"c"'
1) (integer) 1
2) (integer) 2
3) (integer) 3
127.0.0.1:6379> JSON.GET k1
"[[\"c\"],[\"c\",\"a\"],[\"c\",\"a\",\"b\"]]"
```

 Sintaksis jalur terbatas:

```
127.0.0.1:6379> JSON.SET k1 . '[[], ["a"], ["a", "b"]]'
OK
127.0.0.1:6379> JSON.ARRINSERT k1 . 0 '"c"'
(integer) 4
127.0.0.1:6379> JSON.GET k1
"[\"c\",[],[\"a\"],[\"a\",\"b\"]]"
```

# JSON.ARRLEN
<a name="json-arrlen"></a>

Mendapatkan panjang nilai array di jalur.

Sintaksis

```
JSON.ARRLEN <key> [path] 
```
+ kunci (wajib) - Kunci Valkey atau Redis OSS dari jenis dokumen JSON.
+ jalur (opsional) – Sebuah jalur JSON. Diatur secara default ke root jika tidak disediakan.

**Nilai yang ditampilkan**

Jika jalur adalah sintaksis yang ditingkatkan:
+ Array integer yang merepresentasikan panjang array di setiap jalur.
+ Jika nilai bukan array, nilai yang akan dikembalikan adalah kosong.
+ Kosong jika kunci dokumen tidak ada.

Jika jalur adalah sintaksis terbatas:
+ Integer, panjang array.
+ Jika memilih beberapa objek, perintah ini mengembalikan panjang array pertama.
+ Kesalahan `WRONGTYPE` jika nilai di jalur bukan array.
+ Kesalahan `NONEXISTENT JSON` jika jalur tidak ada.
+ Kosong jika kunci dokumen tidak ada.

**Contoh**

 Sintaksis jalur yang ditingkatkan:

```
127.0.0.1:6379> JSON.SET k1 . '[[], ["a"], ["a", "b"], ["a", "b", "c"]]'
OK
127.0.0.1:6379> JSON.ARRLEN k1 $[*]
1) (integer) 0
2) (integer) 1
3) (integer) 2
4) (integer) 3

127.0.0.1:6379> JSON.SET k2 . '[[], "a", ["a", "b"], ["a", "b", "c"], 4]'
OK
127.0.0.1:6379> JSON.ARRLEN k2 $[*]
1) (integer) 0
2) (nil)
3) (integer) 2
4) (integer) 3
5) (nil)
```

 Sintaksis jalur terbatas:

```
127.0.0.1:6379> JSON.SET k1 . '[[], ["a"], ["a", "b"], ["a", "b", "c"]]' 
OK 
127.0.0.1:6379> JSON.ARRLEN k1 [*] 
(integer) 0 
127.0.0.1:6379> JSON.ARRLEN k1 [1] 
(integer) 1 
127.0.0.1:6379> JSON.ARRLEN k1 [2] 
(integer) 2

127.0.0.1:6379> JSON.SET k2 . '[[], "a", ["a", "b"], ["a", "b", "c"], 4]' 
OK
127.0.0.1:6379> JSON.ARRLEN k2 [1] 
(error) WRONGTYPE JSON element is not an array 
127.0.0.1:6379> JSON.ARRLEN k2 [0] 
(integer) 0
127.0.0.1:6379> JSON.ARRLEN k2 [6] 
(error) OUTOFBOUNDARIES Array index is out of bounds
127.0.0.1:6379> JSON.ARRLEN k2 a.b 
(error) NONEXISTENT JSON path does not exist
```

# JSON.ARRPOP
<a name="json-arrpop"></a>

Menghapus dan mengembalikan elemen pada indeks dari array. Popping array kosong akan menampilkan null.

Sintaksis

```
JSON.ARRPOP <key> [path [index]]
```
+ kunci (wajib) - Kunci Valkey atau Redis OSS dari jenis dokumen JSON.
+ jalur (opsional) – Sebuah jalur JSON. Default ke root jika tidak disediakan.
+ indeks (opsional) – Posisi dalam array tempat popping dimulai.
  + Default ke -1 jika tidak disediakan, yang berarti elemen terakhir.
  + Nilai negatif berarti posisi dari elemen terakhir.
  + Indeks di luar batas akan dibulatkan ke batas array masing-masing.

**Nilai yang ditampilkan**

Jika jalur adalah sintaksis yang ditingkatkan:
+ Array string massal yang merepresentasikan nilai yang di-popping di setiap jalur.
+ Jika nilai adalah array kosong, nilai yang akan dikembalikan adalah kosong.
+ Jika nilai bukan array, nilai yang akan dikembalikan adalah kosong.

Jika jalur adalah sintaksis terbatas:
+ String massal, yang merepresentasikan nilai JSON yang di-popping.
+ Null jika array kosong.
+ Kesalahan `WRONGTYPE` jika nilai di jalur bukan array.

**Contoh**

 Sintaksis jalur yang ditingkatkan:

```
127.0.0.1:6379> JSON.SET k1 . '[[], ["a"], ["a", "b"]]'
OK
127.0.0.1:6379> JSON.ARRPOP k1 $[*]
1) (nil)
2) "\"a\""
3) "\"b\""
127.0.0.1:6379> JSON.GET k1
"[[],[],[\"a\"]]"
```

 Sintaksis jalur terbatas:

```
127.0.0.1:6379> JSON.SET k1 . '[[], ["a"], ["a", "b"]]'
OK
127.0.0.1:6379> JSON.ARRPOP k1
"[\"a\",\"b\"]"
127.0.0.1:6379> JSON.GET k1
"[[],[\"a\"]]"

127.0.0.1:6379> JSON.SET k2 . '[[], ["a"], ["a", "b"]]'
OK
127.0.0.1:6379> JSON.ARRPOP k2 . 0
"[]"
127.0.0.1:6379> JSON.GET k2
"[[\"a\"],[\"a\",\"b\"]]"
```

# JSON.ARRTRIM
<a name="json-arrtrim"></a>

Memangkas array di jalur sehingga menjadi subarray [awal, akhir], keduanya inklusif.
+ Jika array kosong, tidak melakukan apa pun, mengembalikan 0.
+ Jika awal <0, perlakukan itu sebagai 0.
+ Jika akhir >= ukuran (ukuran array), perlakukan itu sebagai ukuran-1.
+ Jika awal >= ukuran atau awal > akhir, mengosongkan array dan menampilkan 0.

Sintaksis

```
JSON.ARRTRIM <key> <path> <start> <end>
```
+ kunci (wajib) - Kunci Valkey atau Redis OSS dari jenis dokumen JSON.
+ jalur (wajib) – Sebuah jalur JSON.
+ Awal (wajib) – Indeks awal, inklusif.
+ akhir (wajib) – Indeks akhir, inklusif.

**Nilai yang ditampilkan**

Jika jalur adalah sintaksis yang ditingkatkan:
+ Array integer yang merepresentasikan panjang baru array di setiap jalur.
+ Jika nilai adalah array kosong, nilai yang akan dikembalikan adalah kosong.
+ Jika nilai bukan array, nilai yang akan dikembalikan adalah kosong.
+ Kesalahan `OUTOFBOUNDARIES` jika argumen indeks di luar batas.

Jika jalur adalah sintaksis terbatas:
+ Integer, panjang baru array.
+ Null jika array kosong.
+ Kesalahan `WRONGTYPE` jika nilai di jalur bukan array.
+ Kesalahan `OUTOFBOUNDARIES` jika argumen indeks di luar batas.

**Contoh**

 Sintaksis jalur yang ditingkatkan:

```
127.0.0.1:6379> JSON.SET k1 . '[[], ["a"], ["a", "b"], ["a", "b", "c"]]'
OK
127.0.0.1:6379> JSON.ARRTRIM k1 $[*] 0 1
1) (integer) 0
2) (integer) 1
3) (integer) 2
4) (integer) 2
127.0.0.1:6379> JSON.GET k1
"[[],[\"a\"],[\"a\",\"b\"],[\"a\",\"b\"]]"
```

 Sintaksis jalur terbatas:

```
127.0.0.1:6379> JSON.SET k1 . '{"children": ["John", "Jack", "Tom", "Bob", "Mike"]}'
OK
127.0.0.1:6379> JSON.ARRTRIM k1 .children 0 1
(integer) 2
127.0.0.1:6379> JSON.GET k1 .children
"[\"John\",\"Jack\"]"
```

# JSON.CLEAR
<a name="json-clear"></a>

Membersihkan array atau objek di jalur.

Sintaksis

```
JSON.CLEAR <key> [path]
```
+ kunci (wajib) - Kunci Valkey atau Redis OSS dari jenis dokumen JSON.
+ jalur (opsional) – Sebuah jalur JSON. Diatur secara default ke root jika tidak disediakan.

**Nilai yang ditampilkan**
+ Integer, jumlah kontainer dihapus.
+ Menghapus array kosong atau akun objek untuk 1 kontainer yang dihapus.
+ Menghapus nilai non-kontainer mengembalikan 0.

**Contoh**

```
127.0.0.1:6379> JSON.SET k1 . '[[], [0], [0,1], [0,1,2], 1, true, null, "d"]'
OK
127.0.0.1:6379>  JSON.CLEAR k1  $[*]
(integer) 7
127.0.0.1:6379> JSON.CLEAR k1  $[*]
(integer) 4
127.0.0.1:6379> JSON.SET k2 . '{"children": ["John", "Jack", "Tom", "Bob", "Mike"]}'
OK
127.0.0.1:6379> JSON.CLEAR k2 .children
(integer) 1
127.0.0.1:6379> JSON.GET k2 .children
"[]"
```

# JSON.DEBUG
<a name="json-debug"></a>

Melaporkan informasi. Subperintah yang didukung adalah:
+ MEMORY <key> [path] – Melaporkan penggunaan memori dalam byte dari nilai JSON. Jalur akan diatur secara default ke root jika tidak disediakan.
+ FIELDS <key> [path] – Melaporkan jumlah bidang di jalur dokumen yang ditentukan. Jalur akan diatur secara default ke root jika tidak disediakan. Setiap nilai JSON non-kontainer dihitung sebagai satu bidang. Objek dan array secara rekursif menghitung satu bidang untuk masing-masing nilai JSON. Setiap nilai kontainer, kecuali kontainer root, dihitung sebagai satu bidang tambahan.
+ HELP – Mencetak pesan bantuan dari perintah.

Sintaksis

```
JSON.DEBUG <subcommand & arguments>
```

Tergantung pada subperintah:

MEMORY
+ Jika jalur adalah sintaksis yang ditingkatkan:
  + Menampilkan array integer yang merepresentasikan ukuran memori (dalam byte) dari nilai JSON di setiap jalur.
  + Mengembalikan array kosong jika kunci Valkey atau Redis OSS tidak ada.
+ Jika jalur adalah sintaksis terbatas:
  + Menampilkan integer, ukuran memori, dan nilai JSON dalam byte.
  + Mengembalikan null jika kunci Valkey atau Redis OSS tidak ada.

FIELD
+ Jika jalur adalah sintaksis yang ditingkatkan:
  + Menampilkan array integer yang merepresentasikan jumlah bidang nilai JSON di setiap jalur.
  + Mengembalikan array kosong jika kunci Valkey atau Redis OSS tidak ada.
+ Jika jalur adalah sintaksis terbatas:
  + Menampilkan integer, jumlah bidang nilai JSON.
  + Mengembalikan null jika kunci Valkey atau Redis OSS tidak ada.

HELP – Menampilkan array pesan bantuan.

**Contoh**

Sintaksis jalur yang ditingkatkan:

```
127.0.0.1:6379> JSON.SET k1 . '[1, 2.3, "foo", true, null, {}, [], {"a":1, "b":2}, [1,2,3]]'
OK
127.0.0.1:6379> JSON.DEBUG MEMORY k1 $[*]
1) (integer) 16
2) (integer) 16
3) (integer) 19
4) (integer) 16
5) (integer) 16
6) (integer) 16
7) (integer) 16
8) (integer) 50
9) (integer) 64
127.0.0.1:6379> JSON.DEBUG FIELDS k1 $[*]
1) (integer) 1
2) (integer) 1
3) (integer) 1
4) (integer) 1
5) (integer) 1
6) (integer) 0
7) (integer) 0
8) (integer) 2
9) (integer) 3
```

Sintaksis jalur terbatas:

```
127.0.0.1:6379> JSON.SET k1 . '{"firstName":"John","lastName":"Smith","age":27,"weight":135.25,"isAlive":true,"address":{"street":"21 2nd Street","city":"New York","state":"NY","zipcode":"10021-3100"},"phoneNumbers":[{"type":"home","number":"212 555-1234"},{"type":"office","number":"646 555-4567"}],"children":[],"spouse":null}'
OK
127.0.0.1:6379> JSON.DEBUG MEMORY k1
(integer) 632
127.0.0.1:6379> JSON.DEBUG MEMORY k1 .phoneNumbers
(integer) 166

127.0.0.1:6379> JSON.DEBUG FIELDS k1
(integer) 19
127.0.0.1:6379> JSON.DEBUG FIELDS k1 .address
(integer) 4

127.0.0.1:6379> JSON.DEBUG HELP
1) JSON.DEBUG MEMORY <key> [path] - report memory size (bytes) of the JSON element. Path defaults to root if not provided.
2) JSON.DEBUG FIELDS <key> [path] - report number of fields in the JSON element. Path defaults to root if not provided.
3) JSON.DEBUG HELP - print help message.
```

# JSON.DEL
<a name="json-del"></a>

Menghapus nilai JSON pada jalur dalam kunci dokumen. Jika jalurnya adalah root, itu setara dengan menghapus kunci dari Valkey atau Redis OSS.

Sintaksis

```
JSON.DEL <key> [path]
```
+ kunci (wajib) - Kunci Valkey atau Redis OSS dari jenis dokumen JSON.
+ jalur (opsional) – Sebuah jalur JSON. Diatur secara default ke root jika tidak disediakan.

**Nilai yang ditampilkan**
+ Jumlah elemen yang dihapus.
+ 0 jika kunci Valkey atau Redis OSS tidak ada.
+ 0 jika jalur JSON tidak valid atau tidak ada.

**Contoh**

 Sintaksis jalur yang ditingkatkan:

```
127.0.0.1:6379> JSON.SET k1 . '{"a":{}, "b":{"a":1}, "c":{"a":1, "b":2}, "d":{"a":1, "b":2, "c":3}, "e": [1,2,3,4,5]}'
OK
127.0.0.1:6379> JSON.DEL k1 $.d.*
(integer) 3
127.0.0.1:6379> JSOn.GET k1
"{\"a\":{},\"b\":{\"a\":1},\"c\":{\"a\":1,\"b\":2},\"d\":{},\"e\":[1,2,3,4,5]}"
127.0.0.1:6379> JSON.DEL k1 $.e[*]
(integer) 5
127.0.0.1:6379> JSOn.GET k1
"{\"a\":{},\"b\":{\"a\":1},\"c\":{\"a\":1,\"b\":2},\"d\":{},\"e\":[]}"
```

 Sintaksis jalur terbatas:

```
127.0.0.1:6379> JSON.SET k1 . '{"a":{}, "b":{"a":1}, "c":{"a":1, "b":2}, "d":{"a":1, "b":2, "c":3}, "e": [1,2,3,4,5]}'
OK
127.0.0.1:6379> JSON.DEL k1 .d.*
(integer) 3
127.0.0.1:6379> JSON.GET k1
"{\"a\":{},\"b\":{\"a\":1},\"c\":{\"a\":1,\"b\":2},\"d\":{},\"e\":[1,2,3,4,5]}"
127.0.0.1:6379> JSON.DEL k1 .e[*]
(integer) 5
127.0.0.1:6379> JSON.GET k1
"{\"a\":{},\"b\":{\"a\":1},\"c\":{\"a\":1,\"b\":2},\"d\":{},\"e\":[]}"
```

# JSON.FORGET
<a name="json-forget"></a>

Sebuah alias dari [JSON.DEL](json-del.md).

# JSON.GET
<a name="json-get"></a>

Menampilkan JSON terserialisasi pada satu atau beberapa jalur.

Sintaksis

```
JSON.GET <key>
[INDENT indentation-string]
[NEWLINE newline-string]
[SPACE space-string]
[NOESCAPE]
[path ...]
```
+ kunci (wajib) - Kunci Valkey atau Redis OSS dari jenis dokumen JSON.
+ INDENT/NEWLINE/SPACE(opsional) - Mengontrol format string JSON yang dikembalikan, yaitu, “cetak cantik”. Nilai default masing-masing adalah string kosong. Nilai dapat diganti dalam kombinasi apa pun. Nilai dapat ditentukan dalam urutan apa pun.
+ NOESCAPE – Opsional, boleh ada untuk kompatibilitas lama dan tidak memiliki efek lain.
+ jalur (opsional) - Nol atau lebih jalur JSON, default ke root jika tidak ada yang diberikan. Argumen jalur harus ditempatkan di akhir.

**Nilai yang ditampilkan**

Sintaksis jalur yang ditingkatkan:

 Jika disediakan satu jalur:
+ Mengembalikan string terserialisasi dari array nilai.
+ Jika tidak ada nilai yang dipilih, perintah ini mengembalikan array kosong.

 Jika beberapa jalur diberikan:
+ Menampilkan objek JSON yang di-stringify, di mana setiap jalur adalah kunci.
+ Jika terdapat campuran sintaksis jalur yang ditingkatkan dan dibatasi, hasilnya sesuai dengan sintaksis yang ditingkatkan.
+ Jika jalur tidak ada, nilai yang sesuai adalah array kosong.

**Contoh**

 Sintaksis jalur yang ditingkatkan:

```
127.0.0.1:6379> JSON.SET k1 . '{"firstName":"John","lastName":"Smith","age":27,"weight":135.25,"isAlive":true,"address":{"street":"21 2nd Street","city":"New York","state":"NY","zipcode":"10021-3100"},"phoneNumbers":[{"type":"home","number":"212 555-1234"},{"type":"office","number":"646 555-4567"}],"children":[],"spouse":null}'
OK
127.0.0.1:6379> JSON.GET k1 $.address.*
"[\"21 2nd Street\",\"New York\",\"NY\",\"10021-3100\"]"
127.0.0.1:6379> JSON.GET k1 indent "\t" space " " NEWLINE "\n" $.address.*
"[\n\t\"21 2nd Street\",\n\t\"New York\",\n\t\"NY\",\n\t\"10021-3100\"\n]"
127.0.0.1:6379> JSON.GET k1 $.firstName $.lastName $.age
"{\"$.firstName\":[\"John\"],\"$.lastName\":[\"Smith\"],\"$.age\":[27]}"            
127.0.0.1:6379> JSON.SET k2 . '{"a":{}, "b":{"a":1}, "c":{"a":1, "b":2}}'
OK
127.0.0.1:6379> json.get k2 $..*
"[{},{\"a\":1},{\"a\":1,\"b\":2},1,1,2]"
```

 Sintaksis jalur terbatas:

```
 127.0.0.1:6379> JSON.SET k1 . '{"firstName":"John","lastName":"Smith","age":27,"weight":135.25,"isAlive":true,"address":{"street":"21 2nd Street","city":"New York","state":"NY","zipcode":"10021-3100"},"phoneNumbers":[{"type":"home","number":"212 555-1234"},{"type":"office","number":"646 555-4567"}],"children":[],"spouse":null}'
OK
127.0.0.1:6379> JSON.GET k1 .address
"{\"street\":\"21 2nd Street\",\"city\":\"New York\",\"state\":\"NY\",\"zipcode\":\"10021-3100\"}"
127.0.0.1:6379> JSON.GET k1 indent "\t" space " " NEWLINE "\n" .address
"{\n\t\"street\": \"21 2nd Street\",\n\t\"city\": \"New York\",\n\t\"state\": \"NY\",\n\t\"zipcode\": \"10021-3100\"\n}"
127.0.0.1:6379> JSON.GET k1 .firstName .lastName .age
"{\".firstName\":\"John\",\".lastName\":\"Smith\",\".age\":27}"
```

# JSON.MGET
<a name="json-mget"></a>

Diserialisasi JSONs di jalur dari beberapa kunci dokumen. Perintah ini menampilkan kosong untuk kunci atau jalur JSON yang tidak ada.

**Sintaksis**

```
JSON.MGET <key> [key ...] <path>
```
+ kunci (wajib) - Satu atau lebih kunci Valkey atau Redis OSS dari jenis dokumen.
+ jalur (wajib) – Sebuah jalur JSON.

**Nilai yang ditampilkan**
+ Array string massal. Ukuran array sama dengan jumlah kunci dalam perintah. Setiap elemen array diisi dengan (a) JSON terserialisasi seperti yang dapat ditemukan melalui jalur atau (b) null jika kunci tidak ada, jalur tidak ada dalam dokumen, atau jalur tidak valid (kesalahan sintaksis).
+ Jika salah satu kunci yang ditentukan ada dan bukan kunci JSON, perintah ini mengembalikan kesalahan `WRONGTYPE`.

**Contoh**

Sintaksis jalur yang ditingkatkan:

```
127.0.0.1:6379> JSON.SET k1 . '{"address":{"street":"21 2nd Street","city":"New York","state":"NY","zipcode":"10021"}}'
OK
127.0.0.1:6379> JSON.SET k2 . '{"address":{"street":"5 main Street","city":"Boston","state":"MA","zipcode":"02101"}}'
OK
127.0.0.1:6379> JSON.SET k3 . '{"address":{"street":"100 Park Ave","city":"Seattle","state":"WA","zipcode":"98102"}}'
OK
127.0.0.1:6379> JSON.MGET k1 k2 k3 $.address.city
1) "[\"New York\"]"
2) "[\"Boston\"]"
3) "[\"Seattle\"]"
```

 Sintaksis jalur terbatas:

```
127.0.0.1:6379> JSON.SET k1 . '{"address":{"street":"21 2nd Street","city":"New York","state":"NY","zipcode":"10021"}}'
OK
127.0.0.1:6379> JSON.SET k2 . '{"address":{"street":"5 main Street","city":"Boston","state":"MA","zipcode":"02101"}}'
OK
127.0.0.1:6379> JSON.SET k3 . '{"address":{"street":"100 Park Ave","city":"Seattle","state":"WA","zipcode":"98102"}}'
OK

127.0.0.1:6379> JSON.MGET k1 k2 k3 .address.city
1) "\"New York\""
2) "\"Seattle\""
3) "\"Seattle\""
```

# JSON.MSET
<a name="json-mset"></a>

Didukung untuk Valkey versi 8.1 dan di atas.

Tetapkan nilai JSON untuk beberapa kunci. Operasi adalah atom. Entah semua nilai ditetapkan atau tidak ada yang disetel.

**Sintaksis**

```
JSON.MSET key path json [ key path json ... ]
```
+ Jika jalur memanggil anggota objek:
  + Jika elemen induk tidak ada, perintah akan mengembalikan kesalahan NONEXISTENT.
  + Jika elemen induk ada tetapi bukan objek, perintah akan mengembalikan ERROR.
  + Jika elemen induk ada dan merupakan objek:
    + Jika anggota tidak ada, anggota baru akan ditambahkan ke objek induk jika dan hanya jika objek induk adalah turunan terakhir di jalur. Jika tidak, perintah akan mengembalikan kesalahan NONEXISTENT.
    + Jika anggota ada, nilainya akan diganti dengan nilai JSON.
+ Jika jalur memanggil indeks array:
  + Jika elemen induk tidak ada, perintah akan mengembalikan kesalahan NONEXISTENT.
  + Jika elemen induk ada tetapi bukan array, perintah akan mengembalikan ERROR.
  + Jika elemen induk ada tetapi indeks berada di luar batas, perintah akan mengembalikan kesalahan OUTOFBORDIES.
  + Jika elemen induk ada dan indeks valid, elemen akan diganti dengan nilai JSON baru.
+ Jika jalur memanggil objek atau array, nilai (objek atau array) akan digantikan oleh nilai JSON baru.

**Nilai yang ditampilkan**
+ Balasan string sederhana: 'OK' jika operasi berhasil.
+ Balasan kesalahan sederhana: Jika operasi gagal.

**Contoh**

Sintaksis jalur yang ditingkatkan:

```
127.0.0.1:6379> JSON.MSET k1 . '[1,2,3,4,5]' k2 . '{"a":{"a":1, "b":2, "c":3}}' k3 . '{"a": [1,2,3,4,5]}'
OK
127.0.0.1:6379> JSON.GET k1
"[1,2,3,4,5]"
127.0.0.1:6379> JSON.GET k2
"{\"a\":{\"a\":1,\"b\":2,\"c\":3}}"
127.0.0.1:6379> JSON.MSET k2 $.a.* '0' k3 $.a[*] '0'
OK
127.0.0.1:6379> JSON.GET k2
"{\"a\":{\"a\":0,\"b\":0,\"c\":0}}"
127.0.0.1:6379> JSON.GET k3
"{\"a\":[0,0,0,0,0]}"
```

Sintaksis jalur terbatas:

```
127.0.0.1:6379> JSON.MSET k1 . '{"name": "John","address": {"street": "123 Main St","city": "Springfield"},"phones": ["555-1234","555-5678"]}'
OK
127.0.0.1:6379> JSON.MSET k1 .address.street '"21 2nd Street"' k1 .address.city '"New York"'
OK
127.0.0.1:6379> JSON.GET k1 .address.street
"\"21 2nd Street\""
127.0.0.1:6379> JSON.GET k1 .address.city
"\"New York\""
```

# JSON.NUMINCRBY
<a name="json-numincrby"></a>

Menambah nilai angka di jalur sebanyak sebuah angka tertentu.

Sintaksis

```
JSON.NUMINCRBY <key> <path> <number>
```
+ kunci (wajib) - Kunci Valkey atau Redis OSS dari jenis dokumen JSON.
+ jalur (wajib) – Sebuah jalur JSON.
+ angka (wajib) – Sebuah angka.

**Nilai yang ditampilkan**

Jika jalur adalah sintaksis yang ditingkatkan:
+ Array string massal yang merepresentasikan nilai yang dihasilkan di setiap jalur.
+ Jika nilai bukan angka, nilai yang akan ditampilkan adalah kosong.
+ Kesalahan `WRONGTYPE` jika angka tidak dapat diuraikan.
+ Kesalahan `OVERFLOW` jika hasilnya di luar rentang double 64-bit IEEE.
+ `NONEXISTENT` jika kunci dokumen tidak ada.

Jika jalur adalah sintaksis terbatas:
+ String massal yang merepresentasikan nilai yang dikembalikan.
+ Jika memilih beberapa nilai, perintah ini mengembalikan hasil nilai yang terakhir diperbarui.
+ Kesalahan `WRONGTYPE` jika nilai di jalur bukan angka.
+ Kesalahan `WRONGTYPE` jika angka tidak dapat diuraikan.
+ Kesalahan `OVERFLOW` jika hasilnya di luar rentang double 64-bit IEEE.
+ `NONEXISTENT` jika kunci dokumen tidak ada.

**Contoh**

 Sintaksis jalur yang ditingkatkan:

```
127.0.0.1:6379> JSON.SET k1 . '{"a":[], "b":[1], "c":[1,2], "d":[1,2,3]}'
OK
127.0.0.1:6379> JSON.NUMINCRBY k1 $.d[*] 10
"[11,12,13]"
127.0.0.1:6379> JSON.GET k1
"{\"a\":[],\"b\":[1],\"c\":[1,2],\"d\":[11,12,13]}"

127.0.0.1:6379> JSON.SET k1 $ '{"a":[], "b":[1], "c":[1,2], "d":[1,2,3]}'
OK
127.0.0.1:6379> JSON.NUMINCRBY k1 $.a[*] 1
"[]"
127.0.0.1:6379> JSON.NUMINCRBY k1 $.b[*] 1
"[2]"
127.0.0.1:6379> JSON.NUMINCRBY k1 $.c[*] 1
"[2,3]"
127.0.0.1:6379> JSON.NUMINCRBY k1 $.d[*] 1
"[2,3,4]"
127.0.0.1:6379> JSON.GET k1
"{\"a\":[],\"b\":[2],\"c\":[2,3],\"d\":[2,3,4]}"

127.0.0.1:6379> JSON.SET k2 $ '{"a":{}, "b":{"a":1}, "c":{"a":1, "b":2}, "d":{"a":1, "b":2, "c":3}}'
OK
127.0.0.1:6379> JSON.NUMINCRBY k2 $.a.* 1
"[]"
127.0.0.1:6379> JSON.NUMINCRBY k2 $.b.* 1
"[2]"
127.0.0.1:6379> JSON.NUMINCRBY k2 $.c.* 1
"[2,3]"
127.0.0.1:6379> JSON.NUMINCRBY k2 $.d.* 1
"[2,3,4]"
127.0.0.1:6379> JSON.GET k2
"{\"a\":{},\"b\":{\"a\":2},\"c\":{\"a\":2,\"b\":3},\"d\":{\"a\":2,\"b\":3,\"c\":4}}"

127.0.0.1:6379> JSON.SET k3 $ '{"a":{"a":"a"}, "b":{"a":"a", "b":1}, "c":{"a":"a", "b":"b"}, "d":{"a":1, "b":"b", "c":3}}'
OK
127.0.0.1:6379> JSON.NUMINCRBY k3 $.a.* 1
"[null]"
127.0.0.1:6379> JSON.NUMINCRBY k3 $.b.* 1
"[null,2]"
127.0.0.1:6379> JSON.NUMINCRBY k3 $.c.* 1
"[null,null]"
127.0.0.1:6379> JSON.NUMINCRBY k3 $.d.* 1
"[2,null,4]"
127.0.0.1:6379> JSON.GET k3
"{\"a\":{\"a\":\"a\"},\"b\":{\"a\":\"a\",\"b\":2},\"c\":{\"a\":\"a\",\"b\":\"b\"},\"d\":{\"a\":2,\"b\":\"b\",\"c\":4}}"
```

 Sintaksis jalur terbatas:

```
127.0.0.1:6379> JSON.SET k1 . '{"a":[], "b":[1], "c":[1,2], "d":[1,2,3]}'
OK
127.0.0.1:6379> JSON.NUMINCRBY k1 .d[1] 10
"12"
127.0.0.1:6379> JSON.GET k1
"{\"a\":[],\"b\":[1],\"c\":[1,2],\"d\":[1,12,3]}"

127.0.0.1:6379> JSON.SET k1 . '{"a":[], "b":[1], "c":[1,2], "d":[1,2,3]}'
OK
127.0.0.1:6379> JSON.NUMINCRBY k1 .a[*] 1
(error) NONEXISTENT JSON path does not exist
127.0.0.1:6379> JSON.NUMINCRBY k1 .b[*] 1
"2"
127.0.0.1:6379> JSON.GET k1
"{\"a\":[],\"b\":[2],\"c\":[1,2],\"d\":[1,2,3]}"
127.0.0.1:6379> JSON.NUMINCRBY k1 .c[*] 1
"3"
127.0.0.1:6379> JSON.GET k1
"{\"a\":[],\"b\":[2],\"c\":[2,3],\"d\":[1,2,3]}"
127.0.0.1:6379> JSON.NUMINCRBY k1 .d[*] 1
"4"
127.0.0.1:6379> JSON.GET k1
"{\"a\":[],\"b\":[2],\"c\":[2,3],\"d\":[2,3,4]}"

127.0.0.1:6379> JSON.SET k2 . '{"a":{}, "b":{"a":1}, "c":{"a":1, "b":2}, "d":{"a":1, "b":2, "c":3}}'
OK
127.0.0.1:6379> JSON.NUMINCRBY k2 .a.* 1
(error) NONEXISTENT JSON path does not exist
127.0.0.1:6379> JSON.NUMINCRBY k2 .b.* 1
"2"
127.0.0.1:6379> JSON.GET k2
"{\"a\":{},\"b\":{\"a\":2},\"c\":{\"a\":1,\"b\":2},\"d\":{\"a\":1,\"b\":2,\"c\":3}}"
127.0.0.1:6379> JSON.NUMINCRBY k2 .c.* 1
"3"
127.0.0.1:6379> JSON.GET k2
"{\"a\":{},\"b\":{\"a\":2},\"c\":{\"a\":2,\"b\":3},\"d\":{\"a\":1,\"b\":2,\"c\":3}}"
127.0.0.1:6379> JSON.NUMINCRBY k2 .d.* 1
"4"
127.0.0.1:6379> JSON.GET k2
"{\"a\":{},\"b\":{\"a\":2},\"c\":{\"a\":2,\"b\":3},\"d\":{\"a\":2,\"b\":3,\"c\":4}}"

127.0.0.1:6379> JSON.SET k3 . '{"a":{"a":"a"}, "b":{"a":"a", "b":1}, "c":{"a":"a", "b":"b"}, "d":{"a":1, "b":"b", "c":3}}'
OK
127.0.0.1:6379> JSON.NUMINCRBY k3 .a.* 1
(error) WRONGTYPE JSON element is not a number
127.0.0.1:6379> JSON.NUMINCRBY k3 .b.* 1
"2"
127.0.0.1:6379> JSON.NUMINCRBY k3 .c.* 1
(error) WRONGTYPE JSON element is not a number
127.0.0.1:6379> JSON.NUMINCRBY k3 .d.* 1
"4"
```

# JSON.NUMMULTBY
<a name="json-nummultby"></a>

Mengalikan nilai angka di jalur dengan angka tertentu.

Sintaksis

```
JSON.NUMMULTBY <key> <path> <number>
```
+ kunci (wajib) - Kunci Valkey atau Redis OSS dari jenis dokumen JSON.
+ jalur (wajib) – Sebuah jalur JSON.
+ angka (wajib) – Sebuah angka.

**Nilai yang ditampilkan**

Jika jalur adalah sintaksis yang ditingkatkan:
+ Array string massal yang merepresentasikan nilai yang dihasilkan di setiap jalur.
+ Jika nilai bukan angka, nilai yang akan ditampilkan adalah kosong.
+ Kesalahan `WRONGTYPE` jika angka tidak dapat diuraikan.
+ Kesalahan `OVERFLOW` jika hasilnya di luar rentang angka floating point presisi ganda 64-bit IEEE.
+ `NONEXISTENT` jika kunci dokumen tidak ada.

Jika jalur adalah sintaksis terbatas:
+ String massal yang merepresentasikan nilai yang dikembalikan.
+ Jika memilih beberapa nilai, perintah ini mengembalikan hasil nilai yang terakhir diperbarui.
+ Kesalahan `WRONGTYPE` jika nilai di jalur bukan angka.
+ Kesalahan `WRONGTYPE` jika angka tidak dapat diuraikan.
+ Kesalahan `OVERFLOW` jika hasilnya di luar rentang double 64-bit IEEE.
+ `NONEXISTENT` jika kunci dokumen tidak ada.

**Contoh**

 Sintaksis jalur yang ditingkatkan:

```
127.0.0.1:6379> JSON.SET k1 . '{"a":[], "b":[1], "c":[1,2], "d":[1,2,3]}'
OK
127.0.0.1:6379> JSON.NUMMULTBY k1 $.d[*] 2
"[2,4,6]"
127.0.0.1:6379> JSON.GET k1
"{\"a\":[],\"b\":[1],\"c\":[1,2],\"d\":[2,4,6]}"

127.0.0.1:6379> JSON.SET k1 $ '{"a":[], "b":[1], "c":[1,2], "d":[1,2,3]}'
OK
127.0.0.1:6379> JSON.NUMMULTBY k1 $.a[*] 2
"[]"
127.0.0.1:6379> JSON.NUMMULTBY k1 $.b[*] 2
"[2]"
127.0.0.1:6379> JSON.NUMMULTBY k1 $.c[*] 2
"[2,4]"
127.0.0.1:6379> JSON.NUMMULTBY k1 $.d[*] 2
"[2,4,6]"

127.0.0.1:6379> JSON.SET k2 $ '{"a":{}, "b":{"a":1}, "c":{"a":1, "b":2}, "d":{"a":1, "b":2, "c":3}}'
OK
127.0.0.1:6379> JSON.NUMMULTBY k2 $.a.* 2
"[]"
127.0.0.1:6379> JSON.NUMMULTBY k2 $.b.* 2
"[2]"
127.0.0.1:6379> JSON.NUMMULTBY k2 $.c.* 2
"[2,4]"
127.0.0.1:6379> JSON.NUMMULTBY k2 $.d.* 2
"[2,4,6]"

127.0.0.1:6379> JSON.SET k3 $ '{"a":{"a":"a"}, "b":{"a":"a", "b":1}, "c":{"a":"a", "b":"b"}, "d":{"a":1, "b":"b", "c":3}}'
OK
127.0.0.1:6379> JSON.NUMMULTBY k3 $.a.* 2
"[null]"
127.0.0.1:6379> JSON.NUMMULTBY k3 $.b.* 2
"[null,2]"
127.0.0.1:6379> JSON.NUMMULTBY k3 $.c.* 2
"[null,null]"
127.0.0.1:6379> JSON.NUMMULTBY k3 $.d.* 2
"[2,null,6]"
```

 Sintaksis jalur terbatas:

```
127.0.0.1:6379> JSON.SET k1 . '{"a":[], "b":[1], "c":[1,2], "d":[1,2,3]}'
OK
127.0.0.1:6379> JSON.NUMMULTBY k1 .d[1] 2
"4"
127.0.0.1:6379> JSON.GET k1
"{\"a\":[],\"b\":[1],\"c\":[1,2],\"d\":[1,4,3]}"

127.0.0.1:6379> JSON.SET k1 . '{"a":[], "b":[1], "c":[1,2], "d":[1,2,3]}'
OK
127.0.0.1:6379> JSON.NUMMULTBY k1 .a[*] 2
(error) NONEXISTENT JSON path does not exist
127.0.0.1:6379> JSON.NUMMULTBY k1 .b[*] 2
"2"
127.0.0.1:6379> JSON.GET k1
"{\"a\":[],\"b\":[2],\"c\":[1,2],\"d\":[1,2,3]}"
127.0.0.1:6379> JSON.NUMMULTBY k1 .c[*] 2
"4"
127.0.0.1:6379> JSON.GET k1
"{\"a\":[],\"b\":[2],\"c\":[2,4],\"d\":[1,2,3]}"
127.0.0.1:6379> JSON.NUMMULTBY k1 .d[*] 2
"6"
127.0.0.1:6379> JSON.GET k1
"{\"a\":[],\"b\":[2],\"c\":[2,4],\"d\":[2,4,6]}"

127.0.0.1:6379> JSON.SET k2 . '{"a":{}, "b":{"a":1}, "c":{"a":1, "b":2}, "d":{"a":1, "b":2, "c":3}}'
OK
127.0.0.1:6379> JSON.NUMMULTBY k2 .a.* 2
(error) NONEXISTENT JSON path does not exist
127.0.0.1:6379> JSON.NUMMULTBY k2 .b.* 2
"2"
127.0.0.1:6379> JSON.GET k2
"{\"a\":{},\"b\":{\"a\":2},\"c\":{\"a\":1,\"b\":2},\"d\":{\"a\":1,\"b\":2,\"c\":3}}"
127.0.0.1:6379> JSON.NUMMULTBY k2 .c.* 2
"4"
127.0.0.1:6379> JSON.GET k2
"{\"a\":{},\"b\":{\"a\":2},\"c\":{\"a\":2,\"b\":4},\"d\":{\"a\":1,\"b\":2,\"c\":3}}"
127.0.0.1:6379> JSON.NUMMULTBY k2 .d.* 2
"6"
127.0.0.1:6379> JSON.GET k2
"{\"a\":{},\"b\":{\"a\":2},\"c\":{\"a\":2,\"b\":4},\"d\":{\"a\":2,\"b\":4,\"c\":6}}"

127.0.0.1:6379> JSON.SET k3 . '{"a":{"a":"a"}, "b":{"a":"a", "b":1}, "c":{"a":"a", "b":"b"}, "d":{"a":1, "b":"b", "c":3}}'
OK
127.0.0.1:6379> JSON.NUMMULTBY k3 .a.* 2
(error) WRONGTYPE JSON element is not a number
127.0.0.1:6379> JSON.NUMMULTBY k3 .b.* 2
"2"
127.0.0.1:6379> JSON.GET k3
"{\"a\":{\"a\":\"a\"},\"b\":{\"a\":\"a\",\"b\":2},\"c\":{\"a\":\"a\",\"b\":\"b\"},\"d\":{\"a\":1,\"b\":\"b\",\"c\":3}}"
127.0.0.1:6379> JSON.NUMMULTBY k3 .c.* 2
(error) WRONGTYPE JSON element is not a number
127.0.0.1:6379> JSON.NUMMULTBY k3 .d.* 2
"6"
127.0.0.1:6379> JSON.GET k3
"{\"a\":{\"a\":\"a\"},\"b\":{\"a\":\"a\",\"b\":2},\"c\":{\"a\":\"a\",\"b\":\"b\"},\"d\":{\"a\":2,\"b\":\"b\",\"c\":6}}"
```

# JSON.OBJLEN
<a name="json-objlen"></a>

Mendapatkan jumlah kunci dalam nilai objek di jalur.

Sintaksis

```
JSON.OBJLEN <key> [path]
```
+ kunci (wajib) - Kunci Valkey atau Redis OSS dari jenis dokumen JSON.
+ jalur (opsional) – Sebuah jalur JSON. Diatur secara default ke root jika tidak disediakan.

**Nilai yang ditampilkan**

Jika jalur adalah sintaksis yang ditingkatkan:
+ Array integer yang merepresentasikan panjang array di setiap jalur.
+ Jika nilai bukan objek, nilai yang akan dikembalikan adalah nilai yang kosong.
+ Kosong jika kunci dokumen tidak ada.

Jika jalur adalah sintaksis terbatas:
+ Integer, jumlah kunci dalam objek.
+ Jika memilih beberapa objek, perintah ini mengembalikan panjang objek pertama.
+ Kesalahan `WRONGTYPE` jika nilai di jalur bukan objek.
+ Kesalahan `NONEXISTENT JSON` jika jalur tidak ada.
+ Kosong jika kunci dokumen tidak ada.

**Contoh**

 Sintaksis jalur yang ditingkatkan:

```
127.0.0.1:6379> JSON.SET k1 $ '{"a":{}, "b":{"a":"a"}, "c":{"a":"a", "b":"bb"}, "d":{"a":1, "b":"b", "c":{"a":3,"b":4}}, "e":1}'
OK
127.0.0.1:6379> JSON.OBJLEN k1 $.a
1) (integer) 0
127.0.0.1:6379> JSON.OBJLEN k1 $.a.*
(empty array)
127.0.0.1:6379> JSON.OBJLEN k1 $.b
1) (integer) 1
127.0.0.1:6379> JSON.OBJLEN k1 $.b.*
1) (nil)
127.0.0.1:6379> JSON.OBJLEN k1 $.c
1) (integer) 2
127.0.0.1:6379> JSON.OBJLEN k1 $.c.*
1) (nil)
2) (nil)
127.0.0.1:6379> JSON.OBJLEN k1 $.d
1) (integer) 3
127.0.0.1:6379> JSON.OBJLEN k1 $.d.*
1) (nil)
2) (nil)
3) (integer) 2
127.0.0.1:6379> JSON.OBJLEN k1 $.*
1) (integer) 0
2) (integer) 1
3) (integer) 2
4) (integer) 3
5) (nil)
```

 Sintaksis jalur terbatas:

```
127.0.0.1:6379> JSON.SET k1 . '{"a":{}, "b":{"a":"a"}, "c":{"a":"a", "b":"bb"}, "d":{"a":1, "b":"b", "c":{"a":3,"b":4}}, "e":1}'
OK
127.0.0.1:6379> JSON.OBJLEN k1 .a
(integer) 0
127.0.0.1:6379> JSON.OBJLEN k1 .a.*
(error) NONEXISTENT JSON path does not exist
127.0.0.1:6379> JSON.OBJLEN k1 .b
(integer) 1
127.0.0.1:6379> JSON.OBJLEN k1 .b.*
(error) WRONGTYPE JSON element is not an object
127.0.0.1:6379> JSON.OBJLEN k1 .c
(integer) 2
127.0.0.1:6379> JSON.OBJLEN k1 .c.*
(error) WRONGTYPE JSON element is not an object
127.0.0.1:6379> JSON.OBJLEN k1 .d
(integer) 3
127.0.0.1:6379> JSON.OBJLEN k1 .d.*
(integer) 2
127.0.0.1:6379> JSON.OBJLEN k1 .*
(integer) 0
```

# JSON.OBJKEYS
<a name="json-objkeys"></a>

Mendapatkan nama kunci pada nilai objek di jalur.

Sintaksis

```
JSON.OBJKEYS <key> [path]
```
+ kunci (wajib) - Kunci Valkey atau Redis OSS dari jenis dokumen JSON.
+ jalur (opsional) – Sebuah jalur JSON. Diatur secara default ke root jika tidak disediakan.

**Nilai yang ditampilkan**

Jika jalur adalah sintaksis yang ditingkatkan:
+ Array string massal. Setiap elemen adalah array kunci dalam objek yang cocok.
+ Jika nilai bukan objek, nilai yang akan dikembalikan adalah nilai yang kosong.
+ Kosong jika kunci dokumen tidak ada.

Jika jalur adalah sintaksis terbatas:
+ Array string massal. Setiap elemen adalah nama kunci dalam objek.
+ Jika memilih beberapa objek, perintah ini mengembalikan kunci objek pertama.
+ Kesalahan `WRONGTYPE` jika nilai di jalur bukan objek.
+ Kosong jika kunci dokumen tidak ada.

**Contoh**

 Sintaksis jalur yang ditingkatkan:

```
127.0.0.1:6379> JSON.SET k1 $ '{"a":{}, "b":{"a":"a"}, "c":{"a":"a", "b":"bb"}, "d":{"a":1, "b":"b", "c":{"a":3,"b":4}}, "e":1}'
OK
127.0.0.1:6379> JSON.OBJKEYS k1 $.*
1) (empty array)
2) 1) "a"
3) 1) "a"
   2) "b"
4) 1) "a"
   2) "b"
   3) "c"
5) (empty array)
127.0.0.1:6379> JSON.OBJKEYS k1 $.d
1) 1) "a"
   2) "b"
   3) "c"
```

 Sintaksis jalur terbatas:

```
127.0.0.1:6379> JSON.SET k1 $ '{"a":{}, "b":{"a":"a"}, "c":{"a":"a", "b":"bb"}, "d":{"a":1, "b":"b", "c":{"a":3,"b":4}}, "e":1}'
OK
127.0.0.1:6379> JSON.OBJKEYS k1 .*
1) "a"
127.0.0.1:6379> JSON.OBJKEYS k1 .d
1) "a"
2) "b"
3) "c"
```

# JSON.RESP
<a name="json-resp"></a>

Mengembalikan nilai JSON pada jalur yang diberikan di Valkey atau Redis OSS Serialization Protocol (RESP). Jika nilainya adalah kontainer, responsnya adalah array RESP atau array bersarang.
+ JSON kosong dipetakan ke String Massal Kosong RESP.
+ Nilai JSON Boolean dipetakan ke masing-masing String Sederhana RESP.
+ Angka integer dipetakan ke Integer RESP.
+ Nomor floating point ganda IEEE 64-bit dipetakan ke String Massal RESP.
+ String JSON dipetakan ke String Massal RESP.
+ Array JSON direpresentasikan sebagai Array RESP, dengan elemen pertama adalah string sederhana [, diikuti oleh elemen array.
+ Objek JSON direpresentasikan sebagai Array RESP, dengan elemen pertama adalah string sederhana \$1, diikuti oleh pasangan kunci-nilai, yang masing-masing adalah string massal RESP.

Sintaksis

```
JSON.RESP <key> [path]
```
+ kunci (wajib) - Kunci Valkey atau Redis OSS dari jenis dokumen JSON.
+ jalur (opsional) – Sebuah jalur JSON. Diatur secara default ke root jika tidak disediakan.

**Nilai yang ditampilkan**

Jika jalur adalah sintaksis yang ditingkatkan:
+ Array dari array. Setiap elemen array merepresentasikan bentuk RESP dari nilai pada satu jalur.
+ Array kosong jika kunci dokumen tidak ada.

Jika jalur adalah sintaksis terbatas:
+ Array yang merepresentasikan format RESP dari nilai pada jalur.
+ Kosong jika kunci dokumen tidak ada.

**Contoh**

Sintaksis jalur yang ditingkatkan:

```
127.0.0.1:6379> JSON.SET k1 . '{"firstName":"John","lastName":"Smith","age":27,"weight":135.25,"isAlive":true,"address":{"street":"21 2nd Street","city":"New York","state":"NY","zipcode":"10021-3100"},"phoneNumbers":[{"type":"home","number":"212 555-1234"},{"type":"office","number":"646 555-4567"}],"children":[],"spouse":null}'
OK

127.0.0.1:6379> JSON.RESP k1 $.address
1) 1) {
   2) 1) "street"
      2) "21 2nd Street"
   3) 1) "city"
      2) "New York"
   4) 1) "state"
      2) "NY"
   5) 1) "zipcode"
      2) "10021-3100"

127.0.0.1:6379> JSON.RESP k1 $.address.*
1) "21 2nd Street"
2) "New York"
3) "NY"
4) "10021-3100"

127.0.0.1:6379> JSON.RESP k1 $.phoneNumbers
1) 1) [
   2) 1) {
      2) 1) "type"
         2) "home"
      3) 1) "number"
         2) "555 555-1234"
   3) 1) {
      2) 1) "type"
         2) "office"
      3) 1) "number"
         2) "555 555-4567"

127.0.0.1:6379> JSON.RESP k1 $.phoneNumbers[*]
1) 1) {
   2) 1) "type"
      2) "home"
   3) 1) "number"
      2) "212 555-1234"
2) 1) {
   2) 1) "type"
      2) "office"
   3) 1) "number"
      2) "555 555-4567"
```

Sintaksis jalur terbatas:

```
127.0.0.1:6379> JSON.SET k1 . '{"firstName":"John","lastName":"Smith","age":27,"weight":135.25,"isAlive":true,"address":{"street":"21 2nd Street","city":"New York","state":"NY","zipcode":"10021-3100"},"phoneNumbers":[{"type":"home","number":"212 555-1234"},{"type":"office","number":"646 555-4567"}],"children":[],"spouse":null}'
OK

127.0.0.1:6379> JSON.RESP k1 .address
1) {
2) 1) "street"
   2) "21 2nd Street"
3) 1) "city"
   2) "New York"
4) 1) "state"
   2) "NY"
5) 1) "zipcode"
   2) "10021-3100"

127.0.0.1:6379> JSON.RESP k1
 1) {
 2) 1) "firstName"
    2) "John"
 3) 1) "lastName"
    2) "Smith"
 4) 1) "age"
    2) (integer) 27
 5) 1) "weight"
    2) "135.25"
 6) 1) "isAlive"
    2) true
 7) 1) "address"
    2) 1) {
       2) 1) "street"
          2) "21 2nd Street"
       3) 1) "city"
          2) "New York"
       4) 1) "state"
          2) "NY"
       5) 1) "zipcode"
          2) "10021-3100"
 8) 1) "phoneNumbers"
    2) 1) [
       2) 1) {
          2) 1) "type"
             2) "home"
          3) 1) "number"
             2) "212 555-1234"
       3) 1) {
          2) 1) "type"
             2) "office"
          3) 1) "number"
             2) "555 555-4567"
 9) 1) "children"
    2) 1) [
10) 1) "spouse"
    2) (nil)
```

# JSON.SET
<a name="json-set"></a>

Menetapkan nilai JSON di jalur.

Jika jalur memanggil anggota objek:
+ Jika elemen induk tidak ada, perintah ini mengembalikan kesalahan NONEXISTENT.
+ Jika elemen induk ada, tetapi bukan objek, perintah ini menampilkan ERROR.
+ Jika elemen induk ada dan merupakan objek:
  +  Jika anggota tidak ada, anggota baru akan ditambahkan ke objek induk jika dan hanya jika objek induk adalah turunan terakhir di jalur. Jika tidak, perintah ini mengembalikan kesalahan NONEXISTENT.
  +  Jika anggota ada, nilainya akan diganti dengan nilai JSON.

Jika jalur memanggil indeks array:
+ Jika elemen induk tidak ada, perintah ini mengembalikan kesalahan NONEXISTENT.
+ Jika elemen induk ada tetapi bukan array, perintah ini mengembalikan ERROR.
+ Jika elemen induk ada tetapi indeks di luar batas, perintah ini mengembalikan kesalahan OUTOFBOUNDARIES.
+ Jika elemen induk ada dan indeks valid, elemen akan diganti dengan nilai JSON baru.

Jika jalur memanggil objek atau array, nilai (objek atau array) akan digantikan oleh nilai JSON baru.

Sintaksis

```
JSON.SET <key> <path> <json> [NX | XX] 
```

[NX \$1 XX] Di mana Anda dapat memiliki 0 atau 1 pengidentifikasi [NX \$1 XX].
+ kunci (wajib) - Kunci Valkey atau Redis OSS dari jenis dokumen JSON.
+ jalur (wajib) – Sebuah jalur JSON. Untuk kunci baru, jalur JSON harus menjadi root “.”.
+ NX (opsional) - Jika jalurnya adalah root, tetapkan nilainya hanya jika kuncinya tidak ada. Artinya, masukkan dokumen baru. Jika jalur bukan root, atur nilainya hanya jika jalur tidak ada. Artinya, masukkan nilai ke dalam dokumen.
+ XX (opsional) - Jika jalurnya adalah root, tetapkan nilainya hanya jika kuncinya ada. Artinya, ganti dokumen yang ada. Jika jalur bukan root, atur nilainya hanya jika jalur ada. Artinya, perbarui nilai yang ada.

**Nilai yang ditampilkan**
+ String sederhana 'OK' jika berhasil.
+ Kosong jika kondisi NX atau XX tidak terpenuhi.

**Contoh**

 Sintaksis jalur yang ditingkatkan:

```
127.0.0.1:6379> JSON.SET k1 . '{"a":{"a":1, "b":2, "c":3}}'
OK
127.0.0.1:6379> JSON.SET k1 $.a.* '0'
OK
127.0.0.1:6379> JSON.GET k1
"{\"a\":{\"a\":0,\"b\":0,\"c\":0}}"

127.0.0.1:6379> JSON.SET k2 . '{"a": [1,2,3,4,5]}'
OK
127.0.0.1:6379> JSON.SET k2 $.a[*] '0'
OK
127.0.0.1:6379> JSON.GET k2
"{\"a\":[0,0,0,0,0]}"
```

 Sintaksis jalur terbatas:

```
127.0.0.1:6379> JSON.SET k1 . '{"c":{"a":1, "b":2}, "e": [1,2,3,4,5]}'
OK
127.0.0.1:6379> JSON.SET k1 .c.a '0'
OK
127.0.0.1:6379> JSON.GET k1
"{\"c\":{\"a\":0,\"b\":2},\"e\":[1,2,3,4,5]}"
127.0.0.1:6379> JSON.SET k1 .e[-1] '0'
OK
127.0.0.1:6379> JSON.GET k1
"{\"c\":{\"a\":0,\"b\":2},\"e\":[1,2,3,4,0]}"
127.0.0.1:6379> JSON.SET k1 .e[5] '0'
(error) OUTOFBOUNDARIES Array index is out of bounds
```

# JSON.STRAPPEND
<a name="json-strappend"></a>

Menambahkan string ke string JSON di jalur.

Sintaksis

```
JSON.STRAPPEND <key> [path] <json_string>
```
+ kunci (wajib) - Kunci Valkey atau Redis OSS dari jenis dokumen JSON.
+ jalur (opsional) – Sebuah jalur JSON. Default ke root jika tidak disediakan.
+ json\$1string (wajib) - Representasi JSON dari string. Perhatikan bahwa string JSON harus diberi tanda kutip. Misalnya: '"contoh string"'.

**Nilai yang ditampilkan**

Jika jalur adalah sintaksis yang ditingkatkan:
+ Array integer yang merepresentasikan panjang baru string di setiap jalur.
+ Jika nilai di jalur bukan string, nilai yang akan dikembalikan adalah kosong.
+ Kesalahan `SYNTAXERR` jika argumen input json bukan string JSON yang valid.
+ Kesalahan `NONEXISTENT` jika jalur tidak ada.

Jika jalur adalah sintaksis terbatas:
+ Integer, panjang baru string.
+ Jika memilih beberapa nilai string, perintah ini mengembalikan panjang baru dari string yang terakhir diperbarui.
+ Kesalahan `WRONGTYPE` jika nilai di jalur bukan string.
+ Kesalahan `WRONGTYPE` jika argumen input json bukan string JSON yang valid.
+ Kesalahan `NONEXISTENT` jika jalur tidak ada.

**Contoh**

 Sintaksis jalur yang ditingkatkan:

```
127.0.0.1:6379> JSON.SET k1 $ '{"a":{"a":"a"}, "b":{"a":"a", "b":1}, "c":{"a":"a", "b":"bb"}, "d":{"a":1, "b":"b", "c":3}}'
OK
127.0.0.1:6379> JSON.STRAPPEND k1 $.a.a '"a"'
1) (integer) 2
127.0.0.1:6379> JSON.STRAPPEND k1 $.a.* '"a"'
1) (integer) 3
127.0.0.1:6379> JSON.STRAPPEND k1 $.b.* '"a"'
1) (integer) 2
2) (nil)
127.0.0.1:6379> JSON.STRAPPEND k1 $.c.* '"a"'
1) (integer) 2
2) (integer) 3
127.0.0.1:6379> JSON.STRAPPEND k1 $.c.b '"a"'
1) (integer) 4
127.0.0.1:6379> JSON.STRAPPEND k1 $.d.* '"a"'
1) (nil)
2) (integer) 2
3) (nil)
```

 Sintaksis jalur terbatas:

```
127.0.0.1:6379> JSON.SET k1 . '{"a":{"a":"a"}, "b":{"a":"a", "b":1}, "c":{"a":"a", "b":"bb"}, "d":{"a":1, "b":"b", "c":3}}'
OK
127.0.0.1:6379> JSON.STRAPPEND k1 .a.a '"a"'
(integer) 2
127.0.0.1:6379> JSON.STRAPPEND k1 .a.* '"a"'
(integer) 3
127.0.0.1:6379> JSON.STRAPPEND k1 .b.* '"a"'
(integer) 2
127.0.0.1:6379> JSON.STRAPPEND k1 .c.* '"a"'
(integer) 3
127.0.0.1:6379> JSON.STRAPPEND k1 .c.b '"a"'
(integer) 4
127.0.0.1:6379> JSON.STRAPPEND k1 .d.* '"a"'
(integer) 2
```

# JSON.STRLEN
<a name="json-strlen"></a>

Mendapatkan panjang nilai string JSON di jalur.

Sintaksis

```
JSON.STRLEN <key> [path] 
```
+ kunci (wajib) - Kunci Valkey atau Redis OSS dari jenis dokumen JSON.
+ jalur (opsional) – Sebuah jalur JSON. Diatur secara default ke root jika tidak disediakan.

**Nilai yang ditampilkan**

Jika jalur adalah sintaksis yang ditingkatkan:
+ Array integer yang merepresentasikan panjang nilai array di setiap jalur.
+ Jika nilai bukan string, nilai yang akan dikembalikan adalah kosong.
+ Kosong jika kunci dokumen tidak ada.

Jika jalur adalah sintaksis terbatas:
+ Integer, panjang string.
+ Jika memilih beberapa nilai string, perintah ini mengembalikan panjang string pertama.
+ Kesalahan `WRONGTYPE` jika nilai di jalur bukan string.
+ Kesalahan `NONEXISTENT` jika jalur tidak ada.
+ Kosong jika kunci dokumen tidak ada.

**Contoh**

 Sintaksis jalur yang ditingkatkan:

```
127.0.0.1:6379> JSON.SET k1 $ '{"a":{"a":"a"}, "b":{"a":"a", "b":1}, "c":{"a":"a", "b":"bb"}, "d":{"a":1, "b":"b", "c":3}}'
OK
127.0.0.1:6379> JSON.STRLEN k1 $.a.a
1) (integer) 1
127.0.0.1:6379> JSON.STRLEN k1 $.a.*
1) (integer) 1
127.0.0.1:6379> JSON.STRLEN k1 $.c.*
1) (integer) 1
2) (integer) 2
127.0.0.1:6379> JSON.STRLEN k1 $.c.b
1) (integer) 2
127.0.0.1:6379> JSON.STRLEN k1 $.d.*
1) (nil)
2) (integer) 1
3) (nil)
```

 Sintaksis jalur terbatas:

```
127.0.0.1:6379> JSON.SET k1 $ '{"a":{"a":"a"}, "b":{"a":"a", "b":1}, "c":{"a":"a", "b":"bb"}, "d":{"a":1, "b":"b", "c":3}}'
OK
127.0.0.1:6379> JSON.STRLEN k1 .a.a
(integer) 1
127.0.0.1:6379> JSON.STRLEN k1 .a.*
(integer) 1
127.0.0.1:6379> JSON.STRLEN k1 .c.*
(integer) 1
127.0.0.1:6379> JSON.STRLEN k1 .c.b
(integer) 2
127.0.0.1:6379> JSON.STRLEN k1 .d.*
(integer) 1
```

# JSON.TOGGLE
<a name="json-toggle"></a>

Mengalihkan nilai Boolean antara true dan false di jalur.

Sintaksis

```
JSON.TOGGLE <key> [path] 
```
+ kunci (wajib) - Kunci Valkey atau Redis OSS dari jenis dokumen JSON.
+ jalur (opsional) – Sebuah jalur JSON. Diatur secara default ke root jika tidak disediakan.

**Nilai yang ditampilkan**

Jika jalur adalah sintaksis yang ditingkatkan:
+ Array integer (0 – false, 1 – true) yang merepresentasikan nilai Boolean yang dihasilkan di setiap jalur.
+ Jika nilai bukan nilai Boolean, nilai yang akan dikembalikan adalah kosong.
+ `NONEXISTENT` jika kunci dokumen tidak ada.

Jika jalur adalah sintaksis terbatas:
+ String ("true" /"false") yang merepresentasikan nilai Boolean yang dihasilkan.
+ `NONEXISTENT` jika kunci dokumen tidak ada.
+ Kesalahan `WRONGTYPE` jika nilai di jalur bukan nilai Boolean.

**Contoh**

 Sintaksis jalur yang ditingkatkan:

```
127.0.0.1:6379> JSON.SET k1 . '{"a":true, "b":false, "c":1, "d":null, "e":"foo", "f":[], "g":{}}'
OK
127.0.0.1:6379> JSON.TOGGLE k1 $.*
1) (integer) 0
2) (integer) 1
3) (nil)
4) (nil)
5) (nil)
6) (nil)
7) (nil)
127.0.0.1:6379> JSON.TOGGLE k1 $.*
1) (integer) 1
2) (integer) 0
3) (nil)
4) (nil)
5) (nil)
6) (nil)
7) (nil)
```

 Sintaksis jalur terbatas:

```
127.0.0.1:6379> JSON.SET k1 . true
OK
127.0.0.1:6379> JSON.TOGGLE k1
"false"
127.0.0.1:6379> JSON.TOGGLE k1
"true"

127.0.0.1:6379> JSON.SET k2 . '{"isAvailable": false}'
OK
127.0.0.1:6379> JSON.TOGGLE k2 .isAvailable
"true"
127.0.0.1:6379> JSON.TOGGLE k2 .isAvailable
"false"
```

# JSON.TYPE
<a name="json-type"></a>

Melaporkan jenis nilai di jalur yang diberikan.

Sintaksis

```
JSON.TYPE <key> [path]
```
+ kunci (wajib) - Kunci Valkey atau Redis OSS dari jenis dokumen JSON.
+ jalur (opsional) – Sebuah jalur JSON. Diatur secara default ke root jika tidak disediakan.

**Nilai yang ditampilkan**

Jika jalur adalah sintaksis yang ditingkatkan:
+ Array string yang merepresentasikan jenis nilai di setiap jalur. Jenisnya adalah salah satu dari \$1"null", "boolean", "string", "number", "integer", "object" dan "array"\$1.
+ Jika jalur tidak ada, nilai yang ditampilkan adalah kosong.
+ Array kosong jika kunci dokumen tidak ada.

Jika jalur adalah sintaksis terbatas:
+ String, jenis nilai
+ Kosong jika kunci dokumen tidak ada.
+ Kosong jika jalur JSON tidak valid atau tidak ada.

**Contoh**

Sintaksis jalur yang ditingkatkan:

```
127.0.0.1:6379> JSON.SET k1 . '[1, 2.3, "foo", true, null, {}, []]'
OK
127.0.0.1:6379> JSON.TYPE k1 $[*]
1) integer
2) number
3) string
4) boolean
5) null
6) object
7) array
```

Sintaksis jalur terbatas:

```
127.0.0.1:6379> JSON.SET k1 . '{"firstName":"John","lastName":"Smith","age":27,"weight":135.25,"isAlive":true,"address":{"street":"21 2nd Street","city":"New York","state":"NY","zipcode":"10021-3100"},"phoneNumbers":[{"type":"home","number":"212 555-1234"},{"type":"office","number":"646 555-4567"}],"children":[],"spouse":null}'
OK
127.0.0.1:6379> JSON.TYPE k1
object
127.0.0.1:6379> JSON.TYPE k1 .children
array
127.0.0.1:6379> JSON.TYPE k1 .firstName
string
127.0.0.1:6379> JSON.TYPE k1 .age
integer
127.0.0.1:6379> JSON.TYPE k1 .weight
number
127.0.0.1:6379> JSON.TYPE k1 .isAlive
boolean
127.0.0.1:6379> JSON.TYPE k1 .spouse
null
```