يبدأ معظم JSON الذي أتعامل معه حياته كاستجابة لواجهة برمجة التطبيقات ويحتاج إلى أن ينتهي به الأمر في قاعدة بيانات. في الواجهة الخلفية Toolz.dev، التي تعمل على Express وTypeORM عبر PostgreSQL، فقدت عدد المرات التي قمت فيها بتصدير JSON من خدمة واحدة أردت تحميلها في جدول لاستعلام سريع، أو بذرة ترحيل، أو إعادة إنتاج محلية لـ خطأ. القيام بذلك يدويًا أمر قاتم: تكتب أ CREATE TABLEثم تكتب باليد INSERT العبارات، واقتباس كل سلسلة، ومضاعفة كل فاصلة عليا، وتذكر الحقول التي هي أرقام، وتحويل المفاتيح المفقودة إليها NULL. أخطئ في صف واحد من أصل مائتين وفشل تشغيل الدفعة بأكملها.
يقوم محول JSON إلى SQL بهذا العمل الميكانيكي نيابةً عنك. تقوم بلصق مجموعة من الكائنات، واختيار لهجة قاعدة البيانات، وتنتج CREATE TABLE مع أنواع الأعمدة المعقولة بالإضافة إلى INSERT عبارات لتحميل كل صف. يشرح هذا الدليل كيفية عمل التحويل، والقرارات التي يتخذها بشأن الأنواع والاقتباس، والمواقف الحقيقية التي يوفر فيها فترة ما بعد الظهر.
ليرة تركية؛DR: ال JSON إلى محول SQL يحول مجموعة JSON من الكائنات إلى
CREATE TABLEوINSERTعبارات لـ MySQL أو PostgreSQL أو SQLite أو SQL القياسي. فهو يقرأ مفاتيح الكائنات كأعمدة، ويستنتج كل نوع عمود من البيانات، ويهرب من السلاسل، ويحول المفاتيح المفقودة والأصفار إلىNULL، ويخزن الكائنات المتداخلة كـ JSON. يتم تشغيل كل شيء في متصفحك، لذا فإن استجابة واجهة برمجة التطبيقات التي تحتوي على بيانات حقيقية لا تترك جهازك أبدًا. للرجوع إلى المصادر العكسية أو الجدولية، راجع CSV إلى SQL و json إلى CSV.
ماذا يفعل محول JSON إلى SQL؟
بيانات نموذج JSON وSQL بطرق مختلفة بشكل أساسي. JSON عبارة عن شجرة من الكائنات والمصفوفات المتداخلة ذات أنواع ديناميكية لكل قيمة. الجدول العلائقي عبارة عن شبكة مسطحة من الأعمدة الثابتة المكتوبة. التحويل من واحد إلى آخر عبارة عن سلسلة من القرارات الصغيرة، وقيمة الأداة هي اتخاذ تلك القرارات باستمرار.
فهو يقرأ مفاتيح الكائنات الخاصة بك كمجموعة أعمدة، ويعامل كل كائن كصف، ويختار نوع SQL لكل عمود، ثم يكتب العبارات. يتكون الإخراج من جزأين: اختياري CREATE TABLE وهذا يعلن الأعمدة بأنواعها المستنتجة، و INSERT البيانات التي تحمل القيم. يمكنك لصق النتيجة في عميل قاعدة بيانات، أو حفظها كجزء من الترحيل، أو توجيهها إلى mysql، psql، أو sqlite3 من سطر الأوامر.
عادة ما يكون الإدخال عبارة عن مجموعة من الكائنات، مثل [{ "id": 1, "name": "Ada" }, { "id": 2, "name": "Grace" }]. كائن واحد يعمل أيضًا ويصبح صفًا واحدًا. ما لن يقبله هو مجموعة من القيم المجردة مثل [1, 2, 3]لأنه لا توجد مفاتيح لتحويلها إلى أعمدة، وهذا يخبرك بذلك بدلاً من التخمين.
كيف يتم استنتاج أنواع الأعمدة؟
هذا هو الجزء الذي يفصل المحول المفيد عن المحول الذي يقوم بتفريغ كل شيء في أعمدة نصية. بالنسبة لكل عمود، تقوم الأداة بمسح القيمة الموجودة في كل صف واختيار النوع الأضيق الذي يناسبهم جميعًا.
إذا كانت كل قيمة موجودة في عمود عبارة عن رقم صحيح، يصبح العمود نوعًا صحيحًا. إذا كانت القيم أرقامًا ولكن بعضها يحتوي على أرقام عشرية، فإنها تصبح نوعًا من الفاصلة العائمة. إذا كانت كل قيمة true أو false، يصبح منطقيًا. إذا كانت كل قيمة عبارة عن كائن أو مصفوفة متداخلة، فإنها تصبح من نوع JSON. أي شيء آخر، بما في ذلك العمود الذي تختلف فيه القيم، يعود إلى النص وبالتالي INSERT لا يمكن أن تفشل في عدم تطابق النوع.
null ويتم تخطي المفاتيح المفقودة عند تحديد النوع؛ إنهم يجعلون العمود قابلاً للإلغاء فقط في الممارسة العملية. وهذا يعني عمودًا يحتوي على أرقام في معظم الصفوف و null في عدد قليل لا يزال يُكتب كرقم، وهو ما تريده.
يعتمد اسم النوع المحدد على اللهجة. وإليك كيفية رسم خريطة الأنواع المحايدة:
| النوع المستنتج | MySQL | PostgreSQL | سكليت | SQL القياسية |
|---|---|---|---|---|
| عدد صحيح | INT |
INTEGER |
INTEGER |
INTEGER |
| عشري | DOUBLE |
DOUBLE PRECISION |
REAL |
REAL |
| منطقية | TINYINT(1) |
BOOLEAN |
INTEGER |
BOOLEAN |
| JSON المتداخلة | JSON |
JSONB |
TEXT |
TEXT |
| نص | VARCHAR(255) |
TEXT |
TEXT |
TEXT |
يمكنك إيقاف تشغيل الاستدلال النوعي تمامًا، وفي هذه الحالة يصبح كل عمود نصًا. هذا هو ما تريده أحيانًا عند تحميل البيانات في جدول مرحلي والتخطيط لإلقاءها لاحقًا.
كيف يتعامل مع الأجزاء المحرجة من البيانات الحقيقية؟
نادرًا ما يكون Real JSON موحدًا، ويجب أن يتعامل التحويل معه. تتعامل الأداة مع ثلاث حالات تعطل المحولات الساذجة.
أولاً، الكائنات ذات المفاتيح المختلفة. إذا كان كائن واحد لديه email الحقل والآخر لا، مجموعة الأعمدة هي اتحاد كل مفتاح يظهر، ويتم الاحتفاظ به بالترتيب الذي شوهد لأول مرة، وأي كائن يفتقد مفتاحًا يحصل عليه NULL في هذا العمود. تحذرك الأداة عندما لا تكون الكائنات موحدة حتى لا تتفاجأ.
ثانيا، الكائنات والمصفوفات المتداخلة. أعمدة SQL مسطحة، لذا فإن القيمة مثل { "street": "1 Main St", "city": "London" } لا يمكن أن تصبح عدة أعمدة تلقائيًا دون تحديد الشكل. بدلاً من ذلك، يقوم المحول بتسلسل القيمة المتداخلة مرة أخرى إلى نص JSON وتخزينها في عمود JSON على MySQL، أو عمود JSONB على PostgreSQL، أو عمود نص في مكان آخر. تظل البنية سليمة ويمكنك الاستعلام عنها لاحقًا باستخدام وظائف قاعدة البيانات الخاصة بك '؛s JSON.
ثالثا، الأنواع المختلطة في عمود واحد. إذا كان الحقل رقمًا في سجل واحد وسلسلة في سجل آخر، فإن فرض نوع رقمي سيؤدي إلى فشل نصف الإدخالات. تكتشف الأداة الخلاف وتكتب العمود كنص، ثم تقتبس كل قيمة كسلسلة حرفية بحيث تعمل الدفعة بشكل نظيف.
كيف يتم الهروب من القيم؟
الهروب الصحيح هو الفرق بين البرنامج النصي الذي يتم تشغيله والذي يلقي خطأ في بناء الجملة في الصف 47. القواعد التي يطبقها المحول هي قواعد SQL القياسية.
يتم تغليف قيم النص بعلامات اقتباس مفردة، ويتم مضاعفة أي علامة اقتباس مفردة داخل القيمة، لذلك O'Brien يصبح 'O''Brien'. هذه سلسلة ANSI SQL تفلت وتعمل عبر اللهجات الأربع. تتم كتابة الأرقام والمنطقيات بدون علامات اقتباس، لأن الرقم المقتبس هو سلسلة في معظم المحركات. يتم عرض القيم المنطقية كـ TRUE و FALSE على PostgreSQL وSQL القياسي، وكما 1 و 0 على MySQL وSQLite، مطابقة كيفية تخزين كل محرك لهما. null وتصبح المفاتيح المفقودة هي الكلمة الأساسية غير المقتبسة NULL.
يتم أيضًا اقتباس المعرفات، أي أسماء الجداول والأعمدة، مع علامات خلفية على MySQL وعلامات اقتباس مزدوجة في كل مكان آخر. هذا يحتفظ باسم العمود order أو select من الاصطدام بكلمة محجوزة.
كيفية استخدام محول JSON إلى SQL
الخطوة 1: الصق JSON الخاص بك
قم بإسقاط مجموعة من الكائنات، أو اضغط على تحميل العينة لرؤية الشكل المتوقع. يصبح كل كائن صفًا واحدًا.
الخطوة 2: قم بتسمية الجدول واختيار اللهجة
اكتب اسم الجدول الهدف واختر MySQL أو PostgreSQL أو SQLite أو SQL القياسي. تتحكم اللهجة في نمط الاقتباس وأسماء الأنواع وكيفية كتابة القيم المنطقية وJSON المتداخلة.
الخطوة 3: اضبط خيارات الإخراج
قرر ما إذا كان سيتم تضمين CREATE TABLE، ما إذا كان سيتم استنتاج أنواع الأعمدة، وما إذا كان سيتم إصدار صف واحد متعدد الصفوف INSERT أو عبارة واحدة لكل صف. يتم تحميل إدراج واحد متعدد الصفوف بشكل أسرع؛ تنتج عبارة واحدة لكل صف ملفًا صديقًا للاختلاف وتتيح لك تشغيل الصفوف بشكل فردي.
الخطوة 4: انسخ SQL
اقرأ البيانات التي تم إنشاؤها وانسخها. الصق البرنامج النصي في عميل قاعدة البيانات الخاصة بك أو قم بتشغيله من سطر الأوامر لإنشاء الجدول وتحميله.
حالات الاستخدام الشائعة
زرع قاعدة بيانات من استجابة API
أنت تقوم ببناء ميزة وتحتاج إلى صفوف واقعية للعمل ضدها. اسحب استجابة JSON من واجهة برمجة التطبيقات الأولية، وألصقها، وسيكون لديك CREATE TABLE وإدراج جاهز لبذر قاعدة البيانات المحلية الخاصة بك. لا الكتابة اليدوية، ولا علامات الاقتباس المفقودة.
تحويل التكوين أو التصدير إلى جدول
تقوم الخدمة بتصدير بياناتها كمصفوفة JSON. تريد تشغيل استعلامات SQL مخصصة ضدها بدلاً من كتابة JavaScript لتصفية المصفوفة. قم بتحويله إلى SQL، وقم بتحميله إلى SQLite، واستعلام عنه باستخدام اللغة المصممة لذلك بالضبط.
بناء بذرة الهجرة
غالبًا ما تحتاج عمليات ترحيل الإطار إلى خطوة أولية تقوم بإدراج البيانات المرجعية. توليد INSERT تمنحك البيانات الواردة من تركيبات JSON المعروفة جيدًا كتلة مستقرة وقابلة للمراجعة للصقها في عملية الترحيل، بدلاً من ترجمة البيانات يدويًا.
إعادة إنتاج خطأ الإنتاج محليًا
يظهر خطأ فقط لمجموعة محددة من السجلات. خذ JSON لهذه السجلات، وقم بتحويلها إلى إدخالات، وقم بتحميلها في قاعدة البيانات المحلية الخاصة بك، وقم بإعادة إنتاج المشكلة دون نسخ قاعدة بيانات الإنتاج.
إدراج متعدد الصفوف مقابل كل صف: أيهما تختار؟
يقوم إدراج متعدد الصفوف بتجميع كل صف في عبارة واحدة تحتوي على العديد من العبارات VALUES الصفوف. إنه صغير الحجم ويتم تحميله بشكل أسرع، لأن قاعدة البيانات تقوم بتحليل وتخطيط عبارة واحدة بدلاً من المئات. اختره للتحميل المجمع.
عبارة واحدة لكل صف أكثر تفصيلاً ولكن لها ميزتان. فهو ينتج ملفًا يكون فيه كل صف سطرًا خاصًا به، والذي يُقرأ بشكل نظيف في مراجعة التعليمات البرمجية ويختلف جيدًا في التحكم في الإصدار. وإذا انتهك أحد الصفوف قيدًا، فسيظل الصف الآخر ناجحًا، وهو أمر مفيد عند تحميل بيانات فوضوية وتريد معرفة الصفوف التي تفشل بدلاً من فقدان الدفعة بأكملها. اختره للبذور التي ستلتزم بها أو للبيانات التي لا تثق بها تمامًا بعد.
تشغيل SQL الذي تم إنشاؤه من سطر الأوامر
بمجرد حصولك على البرنامج النصي، يصبح تحميله عبارة عن سطر واحد في كل محرك. بالنسبة إلى SQLite، احفظ الإخراج في ملف وقم بتوصيله عبر الأنابيب sqlite3 mydata.db < insert.sql يقوم بإنشاء الجدول وتحميل الصفوف في ملف قاعدة بيانات جديد. ل PostgreSQL، psql -d mydb -f insert.sql يقوم بتشغيل البرنامج النصي بأكمله مقابل قاعدة البيانات المسماة. بالنسبة لـ MySQL، mysql -u user -p mydb < insert.sql يفعل الشيء نفسه. نظرًا لأن المولد يقتبس المعرفات ويتهرب من قيم اللهجة التي اخترتها، فإن البرنامج النصي يعمل بدون الإصلاحات اليدوية التي تحتاجها SQL المكتوبة بخط اليد عادةً.
إذا قمت بإنشاء عبارة واحدة لكل صف بدلاً من إدراج واحد متعدد الصفوف، فإن تغليف الحمل في المعاملة يستحق القيام به. إضافة BEGIN; في الأعلى و COMMIT; في الأسفل، يتم تحويل مئات الإدخالات الفردية إلى عملية ذرية واحدة، وهي أسرع وأكثر أمانًا: إذا فشل صف لاحق في القيد، فإن الحمل بأكمله يتراجع بدلاً من ترك الجدول نصف مملوء. بالنسبة للإدراج متعدد الصفوف، يكون هذا بالفعل ذريًا بشكل فعال، لأنه عبارة واحدة.
الأداء والحدود مع المصفوفات الكبيرة
التحويل نفسه خطي في حجم الإدخال ويعمل بالكامل في متصفحك، لذلك يتم تحويل بضعة آلاف من الصفوف على الفور. الحدود العملية ليست في الأداة ولكن فيما تفعله بالمخرجات. صف واحد متعدد INSERT مع عشرات الآلاف من الصفوف يمكن أن تتجاوز قاعدة البيانات '؛ الحد الأقصى لحجم البيان أو حد الحزمة، MySQL'؛s max_allowed_packet كونك الشخص الوحيد الذي ضرب أولاً. إذا كنت تقوم بتحميل مصفوفة كبيرة جدًا، فإما التبديل إلى عبارة واحدة لكل صف بحيث تكون كل منها صغيرة، أو تقسيم الإدخال إلى دفعات من بضع مئات من الصفوف وتحويلها بشكل منفصل.
هناك أيضًا تحذير دقيق يستحق المعرفة. يتم تحليل أرقام JSON بواسطة المتصفح '؛s محرك JSON إلى عوامات قياسية مزدوجة الدقة، لذا فإن عددًا صحيحًا أكبر من حوالي تسعة كوادريليون، يتجاوز نطاق الأعداد الصحيحة الآمنة JavaScript'؛، قد يفقد الدقة قبل أن تراه الأداة. هذه خاصية لتحليل JSON في كل بيئة، وليس للمحول، ولكنها تعني أن المعرف الرقمي العملاق أكثر أمانًا ويتم تمثيله كسلسلة في JSON المصدر، والذي ستقوم الأداة بعد ذلك بتخزينه كنص والحفاظ عليه تمامًا.
حيث يتناسب هذا مع الأدوات الأخرى
JSON إلى SQL هو أحد اتجاهات عائلة صغيرة. عندما يكون مصدرك عبارة عن جدول بيانات أو تصدير CSV بدلاً من JSON، CSV إلى SQL يقوم بنفس المهمة من الإدخال الجدولي بنفس نوع الاستدلال والهروب. عندما تحتاج إلى البيانات كملف ثابت بدلاً من قاعدة بيانات، json إلى CSV يسطح المصفوفة إلى صفوف، و CSV إلى JSON يعود في الاتجاه الآخر. قبل أن تقوم بتحويل أي شيء، تنسيق JSON سيتم طباعة JSON والتحقق من صحته بشكل جميل حتى تتمكن من التقاط فاصلة ضالة قبل أن تصبح خطأ تحليل. وبمجرد حصولك على SQL، تنسيق SQL سيتم وضع مسافة بادئة للبيانات ومواءمتها لملف الترحيل الذي تفتخر بالتزامه.
للأسباب الكامنة وراء القيام بكل هذا في المتصفح بدلاً من تحميل البيانات إلى خدمة المحول، فإن خصوصية البيانات في الأدوات عبر الإنترنت يحدد الدليل النموذج من جانب العميل، و مجموعة أدوات مطور الويب يجمع الأدوات المساعدة التي تقترن بشكل جيد بأعمال تحويل البيانات.
أسئلة وأجوبة
كيف يمكنني تحويل JSON إلى SQL؟
الصق مصفوفة JSON من الكائنات، وقم بتعيين اسم الجدول، واختر لهجة SQL الخاصة بك. تقرأ الأداة مفاتيح الكائنات كأسماء أعمدة، وتستنتج كل نوع عمود، وتنشئ عبارات CREATE TABLE plus INSERT التي يمكنك نسخها وتشغيلها في قاعدة البيانات الخاصة بك.
ما هو شكل JSON الذي يقبله؟
مصفوفة من الكائنات هي الإدخال العادي، حيث يكون كل كائن صفًا واحدًا. يعمل كائن واحد أيضًا وينتج صفًا واحدًا. يتم رفض مصفوفات البدائيات أو الأشكال غير المتطابقة بشدة مع وجود خطأ يشرح ما هو متوقع.
ما هي قواعد بيانات SQL المدعومة؟
يقوم المحول بإخراج عبارات MySQL وPostgreSQL وSQLite وSQL القياسية. تتحكم اللهجة التي تختارها في اقتباس المعرف والنوع وبناء الجملة المنطقي ونوع JSON الأصلي، لذلك يعمل البرنامج النصي في قاعدة البيانات هذه دون تعديلات.
كيف يتم تحديد أنواع الأعمدة؟
يتم فحص كل عمود مقابل كل كائن. إذا كانت جميع القيم الحالية عبارة عن أرقام صحيحة، فإنها تصبح نوعًا صحيحًا، وتصبح جميع الأرقام نوعًا عشريًا، وتصبح جميع القيم الصحيحة أو الخاطئة نوعًا منطقيًا، وتصبح جميع الكائنات أو المصفوفات من نوع JSON، وأي شيء مختلط يصبح نصًا.
ماذا يحدث للكائنات والمصفوفات المتداخلة؟
يتم تسلسلها مرة أخرى إلى نص JSON وتخزينها في عمود JSON على MySQL، أو عمود JSONB على PostgreSQL، أو عمود TEXT على SQLite وSQL القياسي. وهذا يحافظ على البنية سليمة حتى تتمكن من الاستعلام عنها باستخدام وظائف قاعدة البيانات JSON الخاصة بك لاحقًا.
ماذا لو كانت الكائنات الخاصة بي تحتوي على مفاتيح مختلفة؟
هذا جيد. الأعمدة هي اتحاد كل مفتاح يظهر، ويتم الاحتفاظ به بالترتيب الذي شوهد لأول مرة. أي كائن يفتقد أحد هذه المفاتيح يصبح فارغًا في هذا العمود، وتحذرك الأداة عندما لا تكون الكائنات موحدة.
كيف يتم الهروب من السلاسل والاقتباسات؟
يتم تغليف قيم النص بعلامات اقتباس مفردة ويتم مضاعفة أي علامة اقتباس مفردة داخل القيمة، وهو هروب SQL القياسي. يتم ترك الأرقام والمنطقات المنطقية بدون علامات اقتباس، وتصبح القيمة الخالية فارغة، ويتم اقتباس المعرفات بعلامات خلفية لـ MySQL أو علامات اقتباس مزدوجة للهجات الأخرى.
هل تم تحميل json الخاص بي في أي مكان؟
رقم. يتم تشغيل التحليل وإنشاء SQL كجافا سكريبت في متصفحك. لا يتم نقل أي شيء أو تسجيله أو تخزينه، وتستمر الأداة في العمل دون اتصال بالإنترنت بمجرد تحميلها، وهو ما يمكنك تأكيده من خلال مشاهدة علامة تبويب الشبكة أثناء التحويل.



