Cookie の設定を選択する

当社は、当社のサイトおよびサービスを提供するために必要な必須 Cookie および類似のツールを使用しています。当社は、パフォーマンス Cookie を使用して匿名の統計情報を収集することで、お客様が当社のサイトをどのように利用しているかを把握し、改善に役立てています。必須 Cookie は無効化できませんが、[カスタマイズ] または [拒否] をクリックしてパフォーマンス Cookie を拒否することはできます。

お客様が同意した場合、AWS および承認された第三者は、Cookie を使用して便利なサイト機能を提供したり、お客様の選択を記憶したり、関連する広告を含む関連コンテンツを表示したりします。すべての必須ではない Cookie を受け入れるか拒否するには、[受け入れる] または [拒否] をクリックしてください。より詳細な選択を行うには、[カスタマイズ] をクリックしてください。

JSON データ型の概要

フォーカスモード
JSON データ型の概要 - Amazon MemoryDB

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

MemoryDB では、JSON データ型を操作するためのいくつかの Valkey および Redis OSS コマンドをサポートしています。以下に、JSON データ型の概要と、サポートされているコマンドの詳細なリストを示します。

用語

言葉 説明

JSON ドキュメント

JSON キーの値です

JSON 値

ドキュメント全体を表すルートを含む、JSON ドキュメントのサブセットです。値は、コンテナまたはコンテナ内のエントリにすることができます

JSON 要素

JSON 値と同じです

サポートされている JSON 標準

JSON 形式は、RFC 7159 および ECMA-404 JSON データ交換標準に準拠しています。JSON テキストの UTF-8 Unicode がサポートされています。

ルート要素

ルート要素は任意の JSON データ型にすることができます。以前の RFC 4627 では、オブジェクトまたは配列のみがルート値として許可されていたことに注意してください。RFC 7159 への更新以降、JSON ドキュメントのルートは任意の JSON データ型にすることができます。

ドキュメントサイズの制限

JSON ドキュメントは、迅速なアクセスおよび変更のために最適化された形式で内部的に格納されます。通常、この形式では、同じドキュメントのシリアル化された同等の表現よりもいくらか多くのメモリを消費することになります。単一の JSON ドキュメントによるメモリ消費量は 64 MB に制限されています。これは JSON 文字列ではなく、インメモリデータ構造のサイズです。JSON.DEBUG MEMORY‬ コマンドを使用することで、JSON ドキュメントが消費するメモリの量を確認できます。‬‬‬

JSON ACLs

  • JSON データ型は、Valkey および Redis OSS ‭アクセスコントロールリスト (ACL)‭‬ 機能に完全に統合されています。JSON コマンドおよびデータへのアクセスを簡単に管理するために、既存のデータ型ごとのカテゴリ (@string、@hash など) と同様の新しいカテゴリ @json が追加されました。他の既存の Valkey および Redis OSS コマンドは @json カテゴリのメンバーではありません。すべての JSON コマンドは、キースペースまたはコマンドの制限と権限を強制します。

  • 次の 5 つの既存の ACL カテゴリが、新しい JSON コマンドを含むように更新されています: @read、@write、@fast、@slow、@admin。以下の表は、適切なカテゴリへの JSON コマンドのマッピングを示しています。

ACL
JSON コマンド @read @write @fast @slow @admin

JSON.ARRAPPEND

y

y

JSON.ARRINDEX

y

y

JSON.ARRINSERT

y

y

JSON.ARRLEN

y

y

JSON.ARRPOP

y

y

JSON.ARRTRIM

y

y

JSON.CLEAR

y

y

JSON.DEBUG

y

y

y

JSON.DEL

y

y

JSON.FORGET

y

y

JSON.GET

y

y

JSON.MGET

y

y

JSON.NUMINCRBY

y

y

JSON.NUMMULTBY

y

y

JSON.OBJKEYS

y

y

JSON.OBJLEN

y

y

JSON.RESP

y

y

JSON.SET

y

y

JSON.STRAPPEND

y

y

JSON.STRLEN

y

y

JSON.STRLEN

y

y

JSON.TOGGLE

y

y

JSON.TYPE

y

y

JSON.NUMINCRBY

y

y

ネスト深度の制限

JSON オブジェクトまたは配列に、それ自体が別の JSON オブジェクトまたは配列である要素がある場合、その内部オブジェクトまたは配列は外部オブジェクトまたは配列内で「ネスト」と呼ばれます。ネストの最大深度の制限は 128 です。128 より大きいネスト深度を含むドキュメントを作成しようとすると、エラーで拒否されます。

コマンド構文

ほとんどのコマンドでは、最初の引数として Valkey または Redis OSS キー名が必要です。一部のコマンドにはパス引数もあります。パス引数は、オプションで提供されない場合、デフォルトでルートになります。

表記法:

  • 必須引数は山括弧 (例: <key>) で囲みます。

  • オプションの引数は角括弧 (例: [path]) で囲みます。

  • 追加のオプション引数は省略記号「…」(例: [json…]) で示されます。

パス構文

Valkey または Redis OSS の JSON では、次の 2 種類のパス構文をサポートしています。

  • 拡張構文 – 以下の表に示すように、Goessner で説明されている JSONPath 構文に従います。わかりやすくするために、表の説明を並べ替え、一部変更しています。

  • 制限構文 — クエリ機能が制限されます。

注記

一部のコマンドの結果は、使用されるパス構文のタイプの影響を受けます。

クエリパスが「$」で始まる場合は、拡張構文が使用されます。その他の場合は、制限構文が使用されます。

拡張構文

記号/式 説明

$

ルート要素

. または

子演算子

..

再帰下降

*

ワイルドカード。オブジェクトまたは配列のすべての要素。

[]

配列の添字演算子。インデックスは 0 ベースです。

[,]

union 演算子

start:end:step

配列のスライス演算子

?()

フィルタ (スクリプト) 式を現在の配列またはオブジェクトに適用します

()

フィルタ式

@

処理中の現在のノードを参照するフィルタ式で使用されます

==

等しい。フィルタ式で使用されます。

!=

等しくない。フィルタ式で使用されます。

>

より大きい。フィルタ式で使用されます。

>=

以上。フィルタ式で使用されます。

<

より小さい。フィルタ式で使用されます。

<=

以下。フィルタ式で使用されます。

&&

論理 AND。複数のフィルタ式を組み合わせるために使用されます。

||

論理 OR。複数のフィルタ式を組み合わせるために使用されます。

以下の例は、Goessner のサンプル XML データに基づいて構築されています。フィールドを追加して一部変更しました。

{ "store": { "book": [ { "category": "reference", "author": "Nigel Rees", "title": "Sayings of the Century", "price": 8.95, "in-stock": true, "sold": true }, { "category": "fiction", "author": "Evelyn Waugh", "title": "Sword of Honour", "price": 12.99, "in-stock": false, "sold": true }, { "category": "fiction", "author": "Herman Melville", "title": "Moby Dick", "isbn": "0-553-21311-3", "price": 8.99, "in-stock": true, "sold": false }, { "category": "fiction", "author": "J. R. R. Tolkien", "title": "The Lord of the Rings", "isbn": "0-395-19395-8", "price": 22.99, "in-stock": false, "sold": false } ], "bicycle": { "color": "red", "price": 19.95, "in-stock": true, "sold": false } } }
パス 説明

$.store.book*.author

この店のすべての本の著者です

$..author

すべての著者です

$.store.*

店のすべてのメンバー

$"store".*

店のすべてのメンバー

$.store..price

店のすべてのものの価格です

$..*

JSON 構造のすべての再帰的メンバーです

$..book*

すべての本です

$..book0

最初の本です

$..book-1

最後の本です

$..book0:2

最初の 2 冊の本です

$..book0,1

最初の 2 冊の本です

$..book0:4

インデックス 0 から 3 までの本です (終了インデックスは含みません)

$..book0:4:2

インデックス 0, 2 の本です

$..book?(@.isbn)

ISBN 番号があるすべての本です

$..book?(@.price<10)

10 ドルより安いすべての本

'$..book?(@.price < 10)'

10 ドルより安いすべての本。(パスに空白が含まれている場合は、引用符で囲む必要があります)

'$..book?(@"price"< 10)'

10 ドルより安いすべての本

'$..book?(@."price"< 10)'

10 ドルより安いすべての本

$..book?(@.price>=10&&@.price<=100)

10 ドルから 100 ドルの価格帯 (この値を含む) にあるすべての本です

'$..book?(@.price>=10 && @.price<=100)'

10 ドルから 100 ドルの価格帯 (この値を含む) にあるすべての本です。(パスに空白が含まれている場合は、引用符で囲む必要があります)

$..book?(@.sold==true||@.in-stock==false)

すべての本が売れたか、在庫切れです

'$..book?(@.sold == true || @.in-stock == false)'

すべての本が売れたか、在庫切れです。(パスに空白が含まれている場合は、引用符で囲む必要があります)

'$.store.book?(@."category" == "fiction")'

フィクションのカテゴリのすべての本です

'$.store.book?(@."category" != "fiction")'

ノンフィクションのカテゴリのすべての本です

フィルタ式の例:

127.0.0.1:6379> JSON.SET k1 . '{"books": [{"price":5,"sold":true,"in-stock":true,"title":"foo"}, {"price":15,"sold":false,"title":"abc"}]}' OK 127.0.0.1:6379> JSON.GET k1 $.books[?(@.price>1&&@.price<20&&@.in-stock)] "[{\"price\":5,\"sold\":true,\"in-stock\":true,\"title\":\"foo\"}]" 127.0.0.1:6379> JSON.GET k1 '$.books[?(@.price>1 && @.price<20 && @.in-stock)]' "[{\"price\":5,\"sold\":true,\"in-stock\":true,\"title\":\"foo\"}]" 127.0.0.1:6379> JSON.GET k1 '$.books[?((@.price>1 && @.price<20) && (@.sold==false))]' "[{\"price\":15,\"sold\":false,\"title\":\"abc\"}]" 127.0.0.1:6379> JSON.GET k1 '$.books[?(@.title == "abc")]' [{"price":15,"sold":false,"title":"abc"}] 127.0.0.1:6379> JSON.SET k2 . '[1,2,3,4,5]' 127.0.0.1:6379> JSON.GET k2 $.*.[?(@>2)] "[3,4,5]" 127.0.0.1:6379> JSON.GET k2 '$.*.[?(@ > 2)]' "[3,4,5]" 127.0.0.1:6379> JSON.SET k3 . '[true,false,true,false,null,1,2,3,4]' OK 127.0.0.1:6379> JSON.GET k3 $.*.[?(@==true)] "[true,true]" 127.0.0.1:6379> JSON.GET k3 '$.*.[?(@ == true)]' "[true,true]" 127.0.0.1:6379> JSON.GET k3 $.*.[?(@>1)] "[2,3,4]" 127.0.0.1:6379> JSON.GET k3 '$.*.[?(@ > 1)]' "[2,3,4]"

制限構文

記号/式 説明

. または

子演算子

[]

配列の添字演算子。インデックスは 0 ベースです。

パス 説明

.store.book0.author

最初の本の著者です

.store.book-1.author

最後の本の著者です

.address.city

都市名です

"store""book"0"title"

最初の本のタイトルです

"store""book"-1"title"

最後の本のタイトルです

注記

このドキュメントで引用されているすべての Goessner コンテンツには、クリエイティブコモンズライセンスが適用されます。

一般的なエラープレフィックス

各エラーメッセージにはプレフィックスが付いています。以下は、一般的なエラープレフィックスのリストです:

プレフィックス 説明

ERR

一般的なエラーです

LIMIT

サイズ制限超過エラー。例:ドキュメントのサイズ制限やネストの深さの制限を超えた

NONEXISTENT

キーまたはパスが存在しません

OUTOFBOUNDARIES

配列インデックスが範囲外です

SYNTAXERR

構文エラー

WRONGTYPE

値のタイプが間違っています

JSON 関連メトリクス

以下の JSON 情報メトリクスが提供されます。

情報 説明

json_total_memory_bytes

JSON オブジェクトに割り当てられたメモリの合計です

json_num_documents

Valkey または Redis OSS エンジン内のドキュメントの総数です

コアメトリクスのクエリを実行するには、以下のコマンドを実行します。

info json_core_metrics

MemoryDB が JSON とどのように相互作用するか

以下は、MemoryDB が JSON データ型とどのように相互作用するかを示しています。

演算子の優先順位

フィルタリングの条件式を評価するときは、ほとんどの言語と同様に、&& が最も優先され、次に || が評価されます。括弧内の操作が最初に実行されます。

最大パスネスト制限の動作

MemoryDB の最大パスネストの制限は 128 です。したがって、$.a.b.c.d... のような値は 128 レベルまでしか到達できません。

数値の処理

JSON では、整数と浮動小数点数で異なるデータ型を使用しません。それらはすべて数値と呼ばれます。

JSON 番号を受信すると、2 つのフォーマットのいずれかで保存されます。数値が 64 ビットの符号付き整数に収まる場合は、その形式に変換されます。それ以外の場合は、文字列として格納されます。2 つの JSON 数値 (JSON.NUMINCRBY と JSON.NUMMULTBY など) に対する算術演算では、可能な限り精度を保つように努めています。2 つのオペランドと結果の値が 64 ビットの符号付き整数に収まる場合は、整数演算が実行されます。それ以外の場合は、入力オペランドが 64 ビット IEEE 倍精度浮動小数点数に変換され、算術演算が実行されて結果が文字列に変換されます。

算術コマンド NUMINCRBY および NUMMULTBY:

  • 両方の数値が整数で、結果が int64 の範囲外である場合は、自動的に倍精度浮動小数点数になります。

  • 少なくとも 1 つの数値が浮動小数点の場合、結果は倍精度浮動小数点数になります。

  • 結果が倍の範囲を超える場合は、‭OVERFLOW‬ エラーが返されます。‬‬‬

注記

Redis OSS エンジンバージョン 6.2.6.R2 以前では、JSON 数値を入力で受け取ると、64 ビット符号付き整数または 64 ビット IEEE 倍精度浮動小数点の 2 つの内部バイナリ表現のいずれかに変換されます。元の文字列、およびそのすべての書式は保持されません。そのため、数値が JSON 応答の一部として出力されるときに、内部のバイナリ表現が、一般的な書式ルールが使用された印刷可能文字列に変換されます。これらのルールにより、受信した文字列とは異なる文字列が生成される場合があります。

  • 両方の数値が整数で、結果が int64 の範囲外である場合は、自動的に 64 ビット IEEE 倍精度浮動小数点数になります。

  • 数字の少なくとも 1 つが浮動小数点の場合、結果は 64 ビット IEEE 倍精度浮動小数点数になります。

  • 結果が 64 ビット IEEE 倍精度の範囲を超える場合は、OVERFLOW エラーが返されます。

利用可能なコマンドの詳細なリストについては、「サポートされているコマンド」を参照してください。

厳密な構文評価

MemoryDB では、パスのサブセットに有効なパスが含まれていても、無効な構文の JSON パスは許可されません。これは、お客様のために正しい動作を維持することを目的とした処置です。

プライバシーサイト規約Cookie の設定
© 2025, Amazon Web Services, Inc. or its affiliates.All rights reserved.