SQL Serverを使用する場合は、FOR JSON
を使用できます 結果をJSONとしてフォーマットするためのクエリの句。これを行うときは、AUTO
のいずれかを選択する必要があります またはPATH
オプション。この記事には、PATH
の使用例が含まれています オプション。
構文
構文は次のようになります:
SELECT ... (your query goes here) FOR JSON PATH;
つまり、基本的には、FOR JSON PATH
を追加するだけです。 クエリの最後まで。
例1-基本的な使用法
実例を示します。
USE Music; SELECT TOP 3 AlbumName, ReleaseDate FROM Albums FOR JSON PATH;
結果:
[ { "AlbumName": "Powerslave", "ReleaseDate": "1984-09-03" }, { "AlbumName": "Powerage", "ReleaseDate": "1978-05-05" }, { "AlbumName": "Singing Down the Lane", "ReleaseDate": "1956-01-01" } ]
そのため、結果は行や列ではなく、適切にフォーマットされたJSONドキュメントとして出力されます。
この場合、TOP 3
を使用しました 結果セットを3つの結果に制限します。
単一行の結果?
結果は、最初は1つの行と1つの列に表示され、次のような1つの長い行として表示される場合があります。
この場合は、結果セットをクリックしてみてください。データベース管理ソフトウェアによっては、上記の例のようにJSONドキュメントが起動するはずです。
これが説明どおりに機能するかどうかは、SQLServerのクエリに使用するソフトウェアによって異なります。
これを書いている時点では、SQL Operations Studio(Azure Data Studioに名前が変更されています)を使用しているときに、これは問題なく機能しました。 VSCodeでMSSQL拡張機能を使用する場合にも正常に機能しました。ただし、SSMSは、結果を1つの長い行としてのみフォーマットします(ただし、JSON形式のままです)。
また、コマンドラインツールを使用してさまざまな程度の成功を収めました。
また、結果セットの大きさによっては、結果が最初は複数の行に分散されている場合もあります。
満足のいく方法で結果を表示できない場合は、別のツールを試してください。
例2–複数のテーブルにまたがるクエリ
この例では、1対多の関係にある2つのテーブルをクエリします。この場合、各アーティストは多くのアルバムを持つことができ、サブクエリを使用して各アーティストのアルバムを取得します。
USE Music; SELECT TOP 2 ArtistName, (SELECT AlbumName FROM Albums WHERE Artists.ArtistId = Albums.ArtistId FOR JSON PATH) AS Albums FROM Artists ORDER BY ArtistName FOR JSON PATH;
結果:
[ { "ArtistName": "AC/DC", "Albums": [ { "AlbumName": "Powerage" } ] }, { "ArtistName": "Allan Holdsworth", "Albums": [ { "AlbumName": "All Night Wrong" }, { "AlbumName": "The Sixteen Men of Tain" } ] } ]
この場合、各アルバムは「アルバム」の下にネストされています。これは、アルバムがサブクエリを介して返されるためです。
例3–ドット表記のネストされた出力
PATH
を使用する場合 オプションで、ドットで区切られた列名を使用してネストされたオブジェクトを作成できます。
これを行うには、ドットで区切られたエイリアスを使用します。次に例を示します:
USE Music; SELECT TOP 3 AlbumId, AlbumName AS 'Details.Album Name', ReleaseDate AS 'Details.Release Date' FROM Albums FOR JSON PATH;
結果:
[ { "AlbumId": 1, "Details": { "Album Name": "Powerslave", "Release Date": "1984-09-03" } }, { "AlbumId": 2, "Details": { "Album Name": "Powerage", "Release Date": "1978-05-05" } }, { "AlbumId": 3, "Details": { "Album Name": "Singing Down the Lane", "Release Date": "1956-01-01" } } ]
例4–ルートノードを追加する
ROOT()
を使用できます ルートノードを出力に追加するオプション。これにより、単一の最上位要素が出力に追加されます。これを行うには、ROOT()
を追加するだけです。 ルートノードに付ける名前を使用して、クエリの最後にオプションを追加します。
したがって、前の例を次のように変更できます。
USE Music; SELECT TOP 3 AlbumId, AlbumName AS 'Details.Album Name', ReleaseDate AS 'Details.Release Date' FROM Albums FOR JSON PATH, ROOT('Albums');
結果:
{ "Albums": [ { "AlbumId": 1, "Details": { "Album Name": "Powerslave", "Release Date": "1984-09-03" } }, { "AlbumId": 2, "Details": { "Album Name": "Powerage", "Release Date": "1978-05-05" } }, { "AlbumId": 3, "Details": { "Album Name": "Singing Down the Lane", "Release Date": "1956-01-01" } } ] }
例5–アレイラッパーを削除する
WITHOUT_ARRAY_WRAPPER
を使用できます 結果を囲む角かっこを削除するオプション。
例:
USE Music; SELECT TOP 1 AlbumName, ReleaseDate FROM Albums FOR JSON PATH, WITHOUT_ARRAY_WRAPPER;
結果:
{ "AlbumName": "Powerslave", "ReleaseDate": "1984-09-03" }
複数行の結果に対してこれを行うと、無効なJSONが発生することに注意してください。