

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

# Perintah yang Didukung
<a name="json-list-commands"></a>

Perintah JSON berikut didukung:

**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.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>

Tambahkan satu atau lebih nilai ke nilai array di jalur.

Sintaksis

```
JSON.ARRAPPEND <key> <path> <json> [json ...]
```
+ kunci (wajib) - kunci jenis dokumen JSON
+ jalur (diperlukan) - jalur JSON
+ json (wajib) - nilai JSON yang akan ditambahkan ke array

**Nilai yang ditampilkan**

Jika jalur adalah sintaksis yang ditingkatkan:
+ Array bilangan bulat, mewakili panjang baru dari array di setiap jalur.
+ Jika nilai bukan array, nilai yang akan dikembalikan adalah kosong.
+ Kesalahan `SYNTAXERR` jika salah satu argumen input json bukan string JSON yang valid.
+ Kesalahan `NONEXISTENT` jika jalur tidak ada.

Jika jalur adalah sintaksis terbatas:
+ Integer, panjang baru array.
+ Jika memilih beberapa nilai array, perintah ini mengembalikan panjang baru dari array yang terakhir diperbarui.
+ 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>

Cari kejadian 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 jenis dokumen JSON
+ jalur (diperlukan) - jalur JSON
+ json-scalar (wajib) — nilai skalar untuk dicari; Skalar JSON mengacu pada nilai yang bukan objek atau array. yaitu, String, number, boolean dan null adalah nilai skalar.
+ mulai (opsional) - indeks mulai, inklusif. Default ke 0 jika tidak disediakan.
+ akhir (opsional) - indeks akhir, eksklusif. Default ke 0 jika tidak disediakan, yang berarti 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>

Masukkan satu atau lebih nilai ke dalam nilai array di jalur sebelum indeks.

Sintaksis

```
JSON.ARRINSERT <key> <path> <index> <json> [json ...]
```
+ kunci (wajib) - kunci jenis dokumen JSON
+ jalur (diperlukan) - jalur JSON
+ index (required) — indeks array sebelum nilai yang dimasukkan.
+ json (wajib) - nilai JSON yang akan ditambahkan ke array

**Nilai yang ditampilkan**

Jika jalur adalah sintaksis yang ditingkatkan:
+ Array bilangan bulat, mewakili panjang baru dari 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>

Dapatkan panjang nilai array di jalur.

Sintaksis

```
JSON.ARRLEN <key> [path] 
```
+ kunci (wajib) - kunci jenis dokumen JSON
+ path (opsional) - jalur JSON. Default ke root jika tidak disediakan

**Nilai yang ditampilkan**

Jika jalur adalah sintaksis yang ditingkatkan:
+ Array bilangan bulat, mewakili 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:
+ Array string massal. Setiap elemen adalah nama kunci dalam objek.
+ Integer, panjang array.
+ Jika memilih beberapa objek, perintah ini mengembalikan panjang array pertama.
+ Kesalahan `WRONGTYPE` jika nilai di jalur bukan array.
+ Kesalahan `WRONGTYPE` 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\"]]'
(error) SYNTAXERR Failed to parse JSON string due to syntax error
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 $[3]
1) (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 [*]
(integer) 0
127.0.0.1:6379> JSON.ARRLEN k2 $[1]
1) (nil)
127.0.0.1:6379> JSON.ARRLEN k2 $[2]
1) (integer) 2
```

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

Hapus dan kembalikan elemen pada indeks dari array. Popping array kosong akan menampilkan null.

Sintaksis

```
JSON.ARRPOP <key> [path [index]]
```
+ kunci (wajib) - kunci jenis dokumen JSON
+ path (opsional) - jalur JSON. Default ke root jika tidak disediakan
+ index (opsional) — posisi dalam array untuk mulai muncul dari.
  + 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, mewakili nilai yang muncul 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, mewakili nilai JSON yang muncul
+ 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>

Potong array di jalur sehingga menjadi subarray [start, end], 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.ARRINSERT <key> <path> <start> <end>
```
+ kunci (wajib) - kunci jenis dokumen JSON
+ jalur (diperlukan) - jalur JSON
+ mulai (wajib) - indeks mulai, inklusif.
+ akhir (wajib) - indeks akhir, inklusif.

**Nilai yang ditampilkan**

Jika jalur adalah sintaksis yang ditingkatkan:
+ Array bilangan bulat, mewakili panjang baru dari 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>

Bersihkan array atau objek di jalan.

Sintaksis

```
JSON.CLEAR <key> [path]
```
+ kunci (wajib) - kunci jenis dokumen JSON
+ path (opsional) - jalur JSON. Default ke root jika tidak disediakan

**Nilai yang ditampilkan**
+ Integer, jumlah kontainer dihapus.
+ Menghapus array kosong atau akun objek untuk 0 kontainer dihapus.
**catatan**  
Sebelum Redis OSS versi 6.2.6.R2, membersihkan array kosong atau akun objek untuk 1 kontainer dihapus.
+ Menghapus nilai non-kontainer mengembalikan 0.
+ Jika tidak ada array atau nilai objek terletak di jalan, perintah 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) 6
127.0.0.1:6379> JSON.CLEAR k1  $[*]
(integer) 0
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>

Laporkan 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.
+ <key>DEPTH [path] — Melaporkan kedalaman jalur maksimum dokumen JSON.
**catatan**  
Subperintah ini hanya tersedia menggunakan Valkey 7.2 atau yang lebih baru, atau mesin Redis OSS versi 6.2.6.R2 atau yang lebih baru.
+ FIELDS <key>[path] — laporkan 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.
+ BANTUAN — cetak pesan bantuan dari perintah.

Sintaksis

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

Tergantung pada subperintah:

MEMORY
+ Jika jalur adalah sintaksis yang ditingkatkan:
  + mengembalikan array bilangan bulat, mewakili ukuran memori (dalam byte) dari nilai JSON di setiap jalur.
  + mengembalikan array kosong jika kunci tidak ada.
+ Jika jalur adalah sintaksis terbatas:
  + mengembalikan integer, ukuran memori nilai JSON dalam byte.
  + mengembalikan null jika kunci tidak ada.

KEDALAMAN
+ Mengembalikan integer yang mewakili kedalaman jalur maksimum dokumen JSON.
+ Mengembalikan null jika kunci tidak ada.

FIELD
+ Jika jalur adalah sintaksis yang ditingkatkan:
  + mengembalikan array bilangan bulat, mewakili jumlah bidang nilai JSON di setiap jalur.
  + mengembalikan array kosong jika kunci tidak ada.
+ Jika jalur adalah sintaksis terbatas:
  + mengembalikan integer, jumlah bidang nilai JSON.
  + mengembalikan null jika kunci tidak ada.

HELP — mengembalikan 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>

Hapus nilai JSON di 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 jenis dokumen JSON
+ path (opsional) - jalur JSON. Default ke root jika tidak disediakan

**Nilai yang ditampilkan**
+ Jumlah elemen yang dihapus.
+ 0 jika kuncinya 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>

Kembalikan JSON serial pada satu atau beberapa jalur.

Sintaksis

```
JSON.GET <key>
[INDENT indentation-string]
[NEWLINE newline-string]
[SPACE space-string]
[NOESCAPE]
[path ...]
```
+ kunci (wajib) - kunci jenis dokumen JSON
+ INDENT/NEWLINE/SPACE(opsional) — mengontrol format string JSON yang dikembalikan, yaitu, “cetak cantik”. Nilai default masing-masing adalah string kosong. Mereka dapat diganti dalam kombinasi apa pun. Nilai dapat ditentukan dalam urutan apa pun.
+ NOESCAPE - opsional, diizinkan hadir untuk kompatibilitas lama dan tidak memiliki efek lain.
+ path (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:
+ Kembalikan string serial dari array nilai.
+ Jika tidak ada nilai yang dipilih, perintah ini mengembalikan array kosong.

 Jika beberapa jalur diberikan:
+ Kembalikan objek JSON dirangkai, 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>

Dapatkan serial JSONs di jalur dari beberapa kunci dokumen. Kembalikan null untuk kunci yang tidak ada atau jalur JSON.

Sintaksis

```
JSON.MGET <key> [key ...] <path>
```
+ kunci (wajib) - Satu atau lebih kunci jenis dokumen.
+ jalur (diperlukan) - jalur JSON

**Nilai yang ditampilkan**
+ Array String Massal. Ukuran array sama dengan jumlah kunci dalam perintah. Setiap elemen array diisi dengan (a) JSON serial seperti yang terletak di jalur atau (b) Null jika kunci tidak ada atau jalur tidak ada dalam dokumen atau jalur tidak valid (kesalahan sintaks).
+ 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.NUMINCRBY
<a name="json-numincrby"></a>

Naikkan nilai angka di jalur dengan nomor tertentu.

Sintaksis

```
JSON.NUMINCRBY <key> <path> <number>
```
+ kunci (wajib) - kunci jenis dokumen JSON
+ jalur (diperlukan) - jalur JSON
+ nomor (wajib) — nomor

**Nilai yang ditampilkan**

Jika jalur adalah sintaksis yang ditingkatkan:
+ Array String massal mewakili 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 mewakili nilai yang dihasilkan.
+ 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>

Lipat gandakan nilai angka di jalur dengan angka tertentu.

Sintaksis

```
JSON.NUMMULTBY <key> <path> <number>
```
+ kunci (wajib) - kunci jenis dokumen JSON
+ jalur (diperlukan) - jalur JSON
+ nomor (wajib) — nomor

**Nilai yang ditampilkan**

Jika jalur adalah sintaksis yang ditingkatkan:
+ Array String massal mewakili 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 mewakili nilai yang dihasilkan.
+ 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>

Dapatkan jumlah kunci dalam nilai objek di jalur.

Sintaksis

```
JSON.OBJLEN <key> [path]
```
+ kunci (wajib) - kunci jenis dokumen JSON
+ path (opsional) - jalur JSON. Default ke root jika tidak disediakan

**Nilai yang ditampilkan**

Jika jalur adalah sintaksis yang ditingkatkan:
+ Array bilangan bulat, mewakili panjang objek 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 `WRONGTYPE` 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>

Dapatkan nama kunci dalam nilai objek di jalur.

Sintaksis

```
JSON.OBJKEYS <key> [path]
```
+ kunci (wajib) - kunci jenis dokumen JSON
+ path (opsional) - jalur JSON. 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.
+ Kesalahan `WRONGTYPE` 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.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>

Kembalikan nilai JSON di jalur yang diberikan di Valkey atau Redis OSS Serialization Protocol (RESP). Jika nilainya adalah wadah, responsnya adalah array RESP atau array bersarang.
+ JSON kosong dipetakan ke String Massal Kosong RESP.
+ Nilai boolean JSON dipetakan ke masing-masing Resp Simple Strings.
+ Angka integer dipetakan ke Integer RESP.
+ Nomor floating point ganda IEEE 64-bit dipetakan ke String Massal RESP.
+ String JSON dipetakan ke Resp Bulk Strings.
+ Array JSON direpresentasikan sebagai Array RESP, di mana elemen pertama adalah string sederhana [, diikuti oleh elemen array.
+ Objek JSON direpresentasikan sebagai Array RESP, di mana 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 jenis dokumen JSON
+ path (opsional) - jalur JSON. 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, mewakili bentuk RESP dari nilai di 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>

Tetapkan nilai JSON di jalur.

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 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.

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 jenis dokumen JSON
+ jalur (diperlukan) - jalur JSON. Untuk kunci baru, jalur JSON harus menjadi root “.”.
+ NX (opsional) - Jika jalurnya adalah root, atur nilainya hanya jika kuncinya tidak ada, yaitu menyisipkan dokumen baru. Jika jalur bukan root, atur nilainya hanya jika jalur tidak ada, yaitu, masukkan nilai ke dalam dokumen.
+ XX (opsional) - Jika jalurnya adalah root, tetapkan nilainya hanya jika kuncinya ada, yaitu mengganti dokumen yang ada. Jika jalur bukan root, tetapkan nilainya hanya jika jalur ada, yaitu, 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>

Tambahkan string ke string JSON di jalur.

Sintaksis

```
JSON.STRAPPEND <key> [path] <json_string>
```
+ kunci (wajib) - kunci jenis dokumen JSON
+ path (opsional) - jalur JSON. Default ke root jika tidak disediakan
+ json\$1string (wajib) - representasi JSON dari string. Perhatikan bahwa string JSON harus dikutip, yaitu, '"foo"'.

**Nilai yang ditampilkan**

Jika jalur adalah sintaksis yang ditingkatkan:
+ Array bilangan bulat, mewakili panjang baru string di setiap jalur.
+ Jika nilai di jalur bukan string, nilai yang akan dikembalikan adalah kosong.
+ `SYNTAXERR `kesalahan jika argumen input json bukan string JSON yang valid.
+ `NONEXISTENT `kesalahan 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>

Dapatkan panjang nilai string JSON di jalur.

Sintaksis

```
JSON.STRLEN <key> [path] 
```
+ kunci (wajib) - kunci jenis dokumen JSON
+ path (opsional) - jalur JSON. Default ke root jika tidak disediakan

**Nilai yang ditampilkan**

Jika jalur adalah sintaksis yang ditingkatkan:
+ Array bilangan bulat, mewakili panjang nilai string 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>

Alihkan nilai boolean antara true dan false di jalur.

Sintaksis

```
JSON.TOGGLE <key> [path] 
```
+ kunci (wajib) - kunci jenis dokumen JSON
+ path (opsional) - jalur JSON. Default ke root jika tidak disediakan

**Nilai yang ditampilkan**

Jika jalur adalah sintaksis yang ditingkatkan:
+ Array bilangan bulat (0 - false, 1 - true) mewakili nilai boolean yang dihasilkan di setiap jalur.
+ Jika nilai bukan boolean, nilai kembalinya yang sesuai adalah null.
+ `NONEXISTENT` jika kunci dokumen tidak ada.

Jika jalur adalah sintaksis terbatas:
+ String (“true” /"false”) mewakili nilai boolean yang dihasilkan.
+ `NONEXISTENT` jika kunci dokumen tidak ada.
+ `WRONGTYPE`kesalahan jika nilai di jalur bukan 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>

Laporkan jenis nilai di jalur yang diberikan.

Sintaksis

```
JSON.TYPE <key> [path]
```
+ kunci (wajib) - kunci jenis dokumen JSON
+ path (opsional) - jalur JSON. Default ke root jika tidak disediakan

**Nilai yang ditampilkan**

Jika jalur adalah sintaksis yang ditingkatkan:
+ Array string, mewakili 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
```