تعلم الأساسيات: كيفية استخدام JSON في SQLite

في هذا الدليل، نستكشف تقاطعًا رائعًا بين تقنيتين شهيرتين: JSON و SQLite. معرفة كيفية استخدام JSON مع SQLite مهم في تطوير البرامج الحديثة، خاصة عند التعامل مع هياكل بيانات معقدة قد لا تتناسب تمامًا في بنية جدولية. سواء كنت مطورًا ذو خبرة واسعة أو مبتدئًا متحمسًا لتوسيع معرفتك، سيساعدك هذا البرنامج التعليمي على البدء في تعلم كيفية استخدام JSON في قاعدة البيانات SQLite.

هيا نبدأ!

تمكين إدارة البيانات في التطبيقات الحديثة باستخدام SQLite

SQLite كمحرك قاعدة البيانات الأكثر نشاطًا واستخدامًا هو قاعدة بيانات سهلة الاستخدام لا تتطلب أية إعدادات معقدة أو اتصال بالخادم. SQLite على وجه التحديد وقابل للتكيف مع تطبيقات متنوعة، مما جعله خيارًا يفضل في تطوير البرمجيات. SQLite لديها حصة مصغرة من البايتات، بشكل عام أقل من 1 ميغابايت، مما يعني أنها أخف من قاعدات البيانات الأخرى. إلى جانب ذلك، تتوافق SQLite تمامًا مع مبادئ ACID.

علاوة على ذلك، يتميز SQLite بميزة أخرى فريدة وهي أنه مناسب جدًا للتطبيقات الفردية والأجهزة المتصلة بالإنترنت مثل أدوات المنزل الذكية، والتي تشكل جزءًا من شبكة الأشياء المتكلمة (IoT). علاوة على ذلك، على الرغم من بساطتها، فإن SQLite تتسلط بقوة على لغة SQL القياسية. يمكنها التعامل مع أشياء مثل المعاملات، الاستعلامات الفرعية، والمشغلات. لذا، فإن SQLite سهلة الاستخدام، ولكنها في غاية القوة كذلك.

تتجاوز قدرة SQLite مجرد تخزين بيانات بسيطة. يتميز SQLite بكفاءة وسهولة الاستخدام، مع ميزات مثل البحث الكامل النصي ودعم BLOB. توفر SQLite أيضًا آلية للامتداد للوظائف الإضافية، مما يجعلها أداة قابلة للتكيف في بيئة البرمجيات الحديثة.

معلومة طريفة: هل تعرفون أنه على الرغم من أن الكثيرين ينطقون SQLite كـ ‘S-Q-Lite’ (sequel-light)، إلا أن مبتكرها، ريتشارد هيب، في الواقع كان يقصد أن يُنطق كـ ‘S-Q-L-ite’ (ess-que-ell-ite) تمامًا مثل المعدن، مما يؤكد طبيعتها القوية ولكنها خفيفة الوزن؟

لماذا يتفوق 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 كتنسيق تبادل بيانات وقابليتها للنقل تعني أن بيانات JSON المخزنة في SQLite يمكن مشاركتها بسهولة ونقلها أو تصديرها إلى أنظمة مختلفة.

دعم SQLite للـ JSON قد نضج بمرور الوقت. تم إدخاله لأول مرة كامتداد في الإصدار 3.9.0، الذي صدر عام 2015، ولكن الإصدارات اللاحقة جاءت مع دعم مدمج للـ JSON. يسمح SQLite لك بحفظ واسترداد بيانات JSON باستخدام عمود TEXT ومجموعة من وظائف JSON، مثل json()، json_extract()، json_object()، و json_array().

فهم وظائف SQLite القوية لاستعلام JSON

يدير ويُعالج SQLite بيانات JSON باستخدام وظائف JSON. فيما يلي أعلى 10 وظائف JSON في SQLite، مُصنفة بمثابة مرجع، وسيتم عرض حالة استخدام كل منها باستخدام عملية 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.

سلسلة عملية لفهم وظائف ترميز وفك ترميز JSON في SQLite

في هذا القسم، قدمنا أمثلة أبسط وشرح مختصر لكل من وظائف JSON التي ذكرناها في القسم السابق. نستخدم مثالًا على بيانات JSON من مولد Dadroit JSON. هذا هو النص الأصلي للبيانات JSON لإعطائك السياق.

دالة json() في SQLite

يحول هذا الاستعلام النص 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}

دالة json_extract() في SQLite

يستخرج هذا الاستعلام قيمة Name من كائن JSON باستخدامه كمسار.

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

ستكون نتيجة هذا الاستعلام كما يلي:

movie_name
Forgotten in the Planet

دالة json_array() في SQLite

يقوم هذا الاستعلام بإنشاء مصفوفة JSON جديدة من المدخلات المقدمة.

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

ستكون النتيجة كما يلي:

array_result
[1,2,3]

دالة json_type() في SQLite

يسترجع هذا الاستعلام نوع البيانات لقيمة Year من كائن JSON.

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

ستكون النتيجة كما يلي:

property_type
integer

دالة json_array_length() في SQLite

يعد هذا الاستعلام عدد العناصر في مجموعة Cast في كائن JSON.

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

ستكون النتيجة كما يلي:

array_length
3

دالة json_object() في SQLite

يخلق هذا الاستعلام كائن JSON بأزواج مفتاح-قيمة لـ ID و Name.

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

النتيجة مثل هذه:

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

دالة json_insert() في SQLite

يقوم هذا الاستعلام بإدراج خاصية مفتاح-قيمة Director في كائن JSON.

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”}

دالة json_remove() في SQLite

يزيل هذا الاستعلام زوج مفتاح-قيمة Director من كائن JSON.

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}

دالة json_replace() في SQLite

يقوم هذا الاستعلام باستبدال Year في كائن JSON بالقيمة الجديدة 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”}

دالة json_valid() في SQLite

يتحقق هذا الاستعلام مما إذا كان السلسلة المقدمة لها البنية والبناء الصحيح اللازم لتكون 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

أمثلة عملية لتحسين الاستعلامات في SQL باستخدام وظائف JSON في SQLite

الآن بعد أن تعرفت على أساسيات JSON في SQLite، يتم تقديم بعض الأمثلة الإضافية على التحرك العملي مع بيانات JSON في قاعدة البيانات SQLite، باستخدام الوظائف السابقة المذكورة، والبيانات السابقة المذكورة على أنها مدخلات.

تخزين بيانات JSON في SQLite باستخدام استعلامات الإدراج

أولاً، تحتاج إلى إدراج البيانات الجاهزة بتنسيق JSON في قاعدة بيانات SQLite. لنقم بإنشاء جدول يسمى movies بحيث يحتوي على حقل واحد يسمى data وهو حقل نصي لأنه يمكن تخزين البيانات الجاهزة بتنسيق JSON في حقل نصي في SQLite. ستستخدم هذا الحقل data لتخزين واسترجاع قيم البيانات الجاهزة بتنسيق JSON:

CREATE TABLE movies ( data TEXT );

ثم لنقم بإدراج بياناتنا الجاهزة بتنسيق JSON في الحقل data في جدول movies:

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}' );

لتعديل (استبدال، إدراج، إزالة، إلخ) البيانات الجاهزة بتنسيق JSON في SQLite، يمكنك استخدام الدوال json_replace()، json_insert()، و json_remove().

الاستعلام التالي يستبدل اسم الفيلم بالقيمة الجديدة حيث المعرف ID هو 1:

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;

الاستعلام التالي يزيل خاصية “Runtime” من البيانات الجاهزة بتنسيق JSON المخزنة مسبقاً في الصف:

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

استخراج بيانات JSON من SQLite

لاسترداد بيانات JSON من SQLite، يمكنك استخدام الدالة 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;

استرداد أول ممثل من قائمة Cast:

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

استخرج الحقلين Year و Rate:

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. تسمح لنا هذه الوظائف باستكشاف وتحليل وتغيير بيانات JSON في قاعدة بيانات SQLite. تقدم SQLite العديد من الأدوات لإدارة بيانات JSON، من إضافة وتغيير بيانات JSON إلى جلبها لأغراض مختلفة. تعرفنا على عشرة وظائف JSON رئيسية في SQLite تسهل التعامل مع بيانات JSON. ثم نظرنا إلى بعض الأمثلة أكثر على الاستعلامات SQL من استخدام هذه الوظائف JSON في SQLite.

تذكر: التمكن من استخدام JSON مع SQLite هو مهارة تحتاج إلى الممارسة بشكل أكثر تعمقًا. لذا، لا تخجل – اغمر نفسك، تجرب، وتعلم. في النهاية، إذا وجدت هذا الدليل مفيدًا، لا تتردد في مشاركته. استمتع برحلتك الترميز!

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