SQLiteでのJSONの基本: 使い方入門

このガイドでは、2つの人気技術、JSONとSQLiteの魅力的な交差点について探ります。SQLiteでJSONを使用する方法を知ることは、特にテーブル構造に完全に収まらない複雑なデータ構造を扱う場合、現代のソフトウェア開発において重要です。経験豊富な開発者であろうと、知識を広げるために熱心な初心者であろうと、このチュートリアルはSQLiteデータベースでJSONを使用する方法を学ぶためのスタートを切るのに役立ちます。

始めましょう!

SQLiteによる現代アプリケーションデータ管理の強化

SQLiteは最も広く展開され、使用されているデータベースエンジンであり、サーバ接続などの複雑な設定を必要とせず、ユーザーフレンドリーなデータベースです。SQLiteは直感的で多様なアプリケーションに適応可能であり、ソフトウェア開発における必須の選択肢となっています。SQLiteは小さなバイナリフットプリントを持ち、一般的に1MB未満であるため、他のデータベースよりも軽量です。さらに、SQLiteはACID原則に完全に準拠しています。

SQLiteのもう一つの独自の特徴は、個々のアプリケーションやスマートホームガジェットのようなインターネット接続機器に適している点です。これらは、モノのインターネット(IoT)の一部です。また、そのシンプルさにもかかわらず、SQLiteは標準SQL言語を強く支配しており、トランザクションサブクエリトリガーなどを扱うことができます。したがって、SQLiteは使いやすく、しかもかなり強力です。

SQLiteの機能は、単純なデータストレージを超えており、効率的でユーザーフレンドリーであり、フルテキスト検索やバイナリラージオブジェクト(blob)サポートなどの機能を備えています。さらに、SQLiteは追加機能のための拡張メカニズムを提供し、現代のソフトウェアエコシステムにおいて適応的なツールとなっています。

豆知識:多くの人がSQLiteを「S-Q-Lite」(シーキューレイト)と発音するが、その創造者であるリチャード・ヒップは、実際には「S-Q-L-ite」(エスキューエルライト)と発音することを意図しており、鉱物のように、堅牢で軽量な性質を強調しています。

SQLiteが現代のリレーショナルデータベースの分野で優れている理由

SQLiteは、完全なクライアントサーバーデータベースが過剰と見なされるシナリオにおけるゴートゥーソリューションであり、軽量でサーバレスです。SQLiteが自己完結型であるため、外部依存関係に頼らず、非常に信頼性が高いです。SQLiteデータベースは異なるファイルシステムやアーキテクチャに対して移植可能であり、SQLiteデータベース内のデータ移行は手軽です。

SQLiteの典型的な使用ケースは、存在する最も広く展開されたデータベースエンジンであるため、さまざまなドメインに跨がっています。例えば、SQLiteは特にモバイルアプリケーションにおけるローカル永続性の標準的な選択肢です。また、SQLiteはデータ分析やテストに広く使用されており、その明快さと力強さが勝利の組み合わせです。最後に、SQLiteはウェブサイトのデータストレージに最適な選択であり、ユーザーデータやサイトコンテンツなどを管理できます。

SQLiteのパフォーマンスは印象的であり、ほとんどの一般的な操作において他の著名なデータベースを超える速度を持っています。

ClickHouseのベンチマークツールを使用して、MySQL、PostgreSQL、SQLite、MongoDBなどの主要データベースのパフォーマンスを様々なクエリに対して比較しました。

SQLiteのJSON処理能力が現代のデータ管理において優れた選択肢となる理由

非構造化データを効率的に管理することは、多くの開発者が直面する課題です。そこでJSONが登場します。柔軟でスキーマレスなデータ形式であるJSONは、テーブル構造にうまく収まらないデータの処理に役立ちます。

JSONデータをSQLiteに格納することで、SQLiteの強力なクエリ機能を活用してJSONデータを効率的に抽出・操作できます。この組み合わせの美しさは、SQLiteがJSONデータを簡単に管理するための組み込み関数を備えているという事実にあります。さらに、JSONがデータ交換形式としての人気とその移植性により、SQLiteに格納されたJSONデータは簡単に共有、移行、または異なるシステムにエクスポートできます。

SQLiteのJSONサポートは時間を経て成熟しました。最初は2015年にリリースされたバージョン3.9.0の拡張機能として導入されましたが、その後のバージョンではJSONへの組み込みサポートが追加されました。SQLiteは、json()json_extract()json_object()json_array()などのJSON関数のセットを使用して、TEXT列にJSONデータを保存および取得できます。

SQLiteの強力なJSONクエリ関数の理解

SQLiteはJSON関数を使用してJSONデータを管理および操作します。以下はSQLiteのトップ10のJSON関数を参考までにリストアップし、各関数の使用例を簡単なSQLクエリで次のセクションで例示します。

  1. json(): この関数は文字列が有効なJSONかどうかを検証します。有効な場合、同じJSONを返します。無効な場合、NULLを返します。
  2. json_extract(): この関数はパスを使用してJSON文字列からオブジェクトを抽出します。
  3. json_array(): この関数はJSON配列を作成します。
  4. json_array_length(): この関数はJSON配列の長さを返します。
  5. json_insert(): この関数はJSON文字列にJSON値を挿入します。
  6. json_object(): この関数はJSONオブジェクトを作成します。
  7. json_remove(): この関数はJSON文字列からプロパティを削除します。
  8. json_replace(): この関数はJSON文字列内の値を置換します。
  9. json_type(): この関数はJSON値の型(INTEGER、REAL、NULL、TRUE、FALSE、TEXT、BLOBなど)を返します。
  10. json_valid(): この関数は文字列が有効なJSONかどうかを検証します。

SQLiteにおけるJSONエンコードおよびデコード関数の理解を深めるための実践的な例のシリーズ

このセクションでは、前のセクションでリストアップしたJSON関数それぞれについて、最小限の例と簡単な説明を提供しました。例として、Dadroit JSONジェネレータのJSONデータを使用しています。以下がコンテキストを理解するための元のJSONです。

SQLiteにおけるjson()関数

このクエリはJSONテキストをJSONオブジェクトに変換します。

SELECT
    json ( '{"ID":1,"Name":"Forgotten in the Planet","Year":1970}' ) AS json_object;

このクエリの結果は以下のようになります。

json_object
{“ID”:1,”Name”:”Forgotten in the Planet”,”Year”:1970}

SQLiteにおけるjson_extract()関数

このクエリはパスとして使用してJSONオブジェクトからNameの値を抽出します。

SELECT json_extract('{"ID":1,"Name":"Forgotten in the Planet","Year":1970}', '$.Name') AS movie_name;

このクエリの結果は以下のようになります。

movie_name
Forgotten in the Planet

SQLiteにおけるjson_array()関数

このクエリは提供された入力から新しいJSON配列を作成します。

SELECT
    json_array ( 1, 2, 3 ) AS array_result;

結果は以下のようになります。

array_result
[1,2,3]

SQLiteにおけるjson_type()関数

このクエリはJSONオブジェクトからYearの値のデータ型を取得します。

SELECT
    json_type ( '{"ID":1,"Name":"Forgotten in the Planet","Year":1970}', '$.Year' ) AS property_type;

結果は以下のようになります。

property_type
integer

SQLiteにおけるjson_array_length()関数

このクエリはJSONオブジェクト内のCast配列の要素数をカウントします。

SELECT
    json_array_length ( '{"Genre":["Comedy","Crime"],"Cast":["Adrian Gratianna","Tani O''Hara","Tessie Delisle"]}', '$.Cast' ) AS array_length;

結果は以下のようになります。

array_length
3

SQLiteにおけるjson_object()関数

このクエリは、IDName のキー-値ペアを持つJSONオブジェクトを作成します。

SELECT
    json_object ( 'ID', 1, 'Name', 'Forgotten in the Planet' ) AS result;

結果は次のようになります:

result
{“ID”:1,”Name”:”Forgotten in the Planet”}

SQLiteにおけるjson_insert()関数

このクエリは、JSONオブジェクトにDirectorのキー-値プロパティを挿入します。

SELECT
    json_insert ( '{"ID":1,"Name":"Forgotten in the Planet","Year":1970}', '$.Director', 'Henrie Randell Githens' ) AS insert_movie;

結果は次のようになります:

insert_movie
{“ID”:1,”Name”:”Forgotten in the Planet”,”Year”:1970,”Director”:”Henrie Randell Githens”}

SQLiteにおけるjson_remove()関数

このクエリは、JSONオブジェクトからDirectorのキー-値ペアを削除します。

SELECT
    json_remove ( '{"ID":1,"Name":"Forgotten in the Planet","Year":1970,"Director":"Henrie Randell Githens"}', '$.Director' ) AS result_of_remove;

結果は次のようになります:

result_of_remove
{“ID”:1,”Name”:”Forgotten in the Planet”,”Year”:1970}

SQLiteにおけるjson_replace()関数

このクエリは、JSONオブジェクト内のYearを新しい値1971で置き換えます。

SELECT
     json_replace ( '{"ID":1,"Name":"Forgotten in the Planet","Year":1970,"Director":"Henrie Randell Githens"}', '$.Year', 1971 ) AS result_of_replace;

結果は次のようになります:

result_of_replace
{“ID”:1,”Name”:”Forgotten in the Planet”,”Year”:1971,”Director”:”Henrie Randell Githens”}

SQLiteにおけるjson_valid()関数

このクエリは、提供された文字列が有効なJSONの正しい構文と構造を持っているかを確認し、有効であれば1を、そうでなければ0を返します。

SELECT
     json_valid ( '{"ID":1,"Name":"Forgotten in the Planet","Year":1970,"Director":"Henrie Randell Githens"}' ) AS result_of_valid;

結果は次のようになります:

result_of_valid
1

SQLiteでのJSON関数を使用した高度なSQLクエリの実践的な例

SQLiteでのJSONの基本について学んだあなたに、ここでは前述のJSON関数と入力として前述のJSONデータを使用したSQLiteデータベース内のJSONデータの実践的なワークフローの例が示されています。

挿入クエリでSQLiteにJSONデータを保存する

まず、JSONをSQLiteデータベースに挿入する必要があります。テキストフィールドとしてdataという名前の1つのフィールドを持つmoviesという名前のテーブルを作成しましょう。SQLiteのテキストフィールドにJSONを保存できるためです。このdataフィールドを使用して、JSON値を保存および取得します:

CREATE TABLE movies ( data TEXT );

次に、テーブルmoviesのフィールドdataにJSONを挿入しましょう:

INSERT INTO movies ( data )
 VALUES
     ( '{"ID":1,"Name":"Forgotten in the Planet","Year":1970,"Genre":["Comedy","Crime"],"Director":"Henrie Randell Githens","Cast":["Adrian Gratianna","Tani OHara","Tessie Delisle"],"Runtime":90,"Rate":7.0}' );

SQLiteでJSONを編集(置換、挿入、削除など)するには、json_replace()json_insert()json_remove()関数を使用できます。

次のクエリは、ID1の映画のnameを新しい値で置き換えます:

UPDATE movies
 SET data = json_replace ( data, '$.Name', 'Found in the Universe' )
 WHERE
     json_extract ( data, '$.ID' ) = 1;

次のクエリは、以前に保存された行のJSONデータに新しいプロパティとして新しいフィールドを挿入します:

UPDATE movies
 SET data = json_insert ( data, '$.Country', 'USA' )
 WHERE
     json_extract ( data, '$.ID' ) = 1;

次のクエリは、以前に保存された行のJSONデータからRuntimeプロパティを削除します:

UPDATE movies
 SET data = json_remove ( data, '$.Runtime' )
 WHERE
     json_extract ( data, '$.ID' ) = 1;

SQLiteからJSONデータを抽出

SQLiteからJSONデータを取得するには、json_extract()または省略記号演算子->を使用できます:

映画の名前を選択します:

SELECT
     json_extract ( data, '$.Name' )
 FROM
     movies
 WHERE
     json_extract ( data, '$.ID' ) = 1;

または、->省略記号演算子を使用します:

SELECT
     data -> '$.Name'
 FROM
     movies
 WHERE
     data -> '$.ID' = 1;

ジャンルのリストを取得します:

SELECT
     json_extract ( data, '$.Genre' )
 FROM
     movies
 WHERE
     json_extract ( data, '$.ID' ) = 1;

キャストリストの最初の俳優を取得します:

SELECT
     json_extract ( data, '$.Cast[0]' )
 FROM
     movies
 WHERE
     json_extract ( data, '$.ID' ) = 1;

YearRateを抽出します:

SELECT
     json_extract ( data, '$.Year' ) AS Year,
     json_extract ( data, '$.Rate' ) AS Rate
 FROM
     movies
 WHERE
     json_extract ( data, '$.ID' ) = 1;

結論と洞察

この旅を無事完了したことをおめでとうございます!JSONデータ型とSQLiteデータベースがどのように連携できるかを学びました。SQLiteはツールキットに便利なツールです。シンプルでありながら強力で、使いやすいです。小さいにもかかわらず、便利な機能がいっぱいです。

端的に言えば、SQLiteはテキスト列といくつかのJSON関数を使用してJSONデータを保存して取得できるようにします。これらの関数により、SQLiteデータベース内のJSONデータを探索、分析、変更できます。SQLiteはJSONデータを管理するための多くのツールを提供しており、JSONデータの追加や変更、さまざまな目的での取得まで対応しています。SQLiteでJSONデータの処理を簡単にする10個の主要なJSON関数について説明しました。次に、これらのJSON関数を使用したSQLiteのSQLクエリのさらに多くの例を見てきました。

覚えておいてください:SQLiteでJSONを使いこなすのは、より徹底的に練習が必要なスキルです。だから、遠慮しないでください – 飛び込んで、実験して、学んでください。最後に、このガイドが役立ったと感じた場合は、自由に共有してください。コーディングの旅を楽しんでください!

Source:
https://dzone.com/articles/learning-the-basics-how-to-use-json-in-sqlite