0Pricing
Lua Academy · درس

ترميز الجداول إلى JSON

حوّل بيانات Lua إلى صيغة متسلسلة

ترميز الجداول إلى JSON درس مجاني في Lua Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Lua Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Lua Academy 4 دروس في المجموع.

أساسيات الترميز

الترميز هو عكس فك الترميز: فهو يحوّل جدول Lua إلى سلسلة JSON. استدعوا json.encode(table).

والنتيجة سلسلة نصية من سطر واحد يمكنكم كتابتها في ملف أو إرسالها عبر الشبكة.

local json = require("dkjson")
local t = { name = "Leo", age = 9 }
print(json.encode(t))

الكائنات مقابل المصفوفات

تعتمد طريقة ترميز جدول Lua على مفاتيحه. فالجدول ذو المفاتيح الصحيحة المتتالية بدءًا من 1 يتحول إلى مصفوفة JSON.

أما الجدول ذو المفاتيح النصية فيتحول إلى كائن JSON. والجداول المختلطة ملتبسة، وينبغي تجنبها.

local json = require("dkjson")
print(json.encode({ 1, 2, 3 }))        -- [1,2,3]
print(json.encode({ a = 1, b = 2 }))   -- {"a":1,"b":2}

تنسيق الإخراج

يكون JSON مضغوطًا افتراضيًا. ويمكن لـ dkjson إضافة مسافات بادئة إلى الإخراج لتسهيل قراءته، وذلك بتمرير جدول خيارات يحتوي على indent = true.

يُعد الإخراج المنسّق مناسبًا جدًا لملفات الإعدادات التي سيحررها المستخدمون يدويًا.

local json = require("dkjson")
local t = { name = "Ann", roles = { "dev", "lead" } }
print(json.encode(t, { indent = true }))

ترميز الأعداد والقيم المنطقية

تُرمَّز أعداد Lua وقيمها المنطقية مباشرةً إلى نظائرها في JSON. وتصبح الأعداد الصحيحة والعشرية أعداد JSON.

local json = require("dkjson")
local t = { count = 5, ratio = 1.5, active = true }
print(json.encode(t))

مشكلة nil

لا يمكنكم تخزين nil في جدول للدلالة على JSON null، لأن إسناد nil يزيل المفتاح بالكامل.

لإخراج قيمة null حرفية، استخدموا الرمز الخاص json.null الذي توفره المكتبة كقيمة.

local json = require("dkjson")
local t = { middle = json.null }
print(json.encode(t))  -- {"middle":null}

تعطّل المصفوفات المتناثرة

إذا احتوى التسلسل على فجوة، كأن يكون الفهرس 2 ذا قيمة nil، فلن تتعامل Lua معه بعد ذلك على أنه مصفوفة سليمة. وقد يتوقف الترميز عند الفجوة أو يتصرف بطريقة غير متوقعة.

حافظوا على اتصال فهارس المصفوفة، بدءًا من 1، للحصول على مصفوفات JSON يمكن التنبؤ بها.

local json = require("dkjson")
local t = { [1] = "a", [3] = "c" }  -- gap at 2
print(json.encode(t))               -- unreliable

كتابة JSON في ملف

لحفظ البيانات بشكل دائم، رمّزوا الجدول إلى سلسلة نصية ثم اكتبوا هذه السلسلة في ملف.

بهذه الطريقة تحفظون الإعدادات أو النتائج أو أي حالة منظمة أخرى.

local json = require("dkjson")
local data = { theme = "dark", volume = 8 }
local f = io.open("settings.json", "w")
f:write(json.encode(data, { indent = true }))
f:close()

الجدول الفارغ يكون كائنًا افتراضيًا

لا يحتوي جدول Lua الفارغ {} على مفاتيح، لذلك يرمّزه dkjson افتراضيًا ككائن فارغ {}، وليس كمصفوفة.

إذا كنتم تحتاجون إلى مصفوفة فارغة، يتيح لكم dkjson وسم الجدول؛ وإلا فسيكون النوع غير محدد بوضوح.

local json = require("dkjson")
print(json.encode({}))  -- {}

ترتيب المفاتيح غير مضمون

لا تملك جداول Lua ترتيبًا متأصلًا للمفاتيح النصية، لذلك قد يختلف ترتيب الحقول في JSON المرمّز.

لا تعتمدوا على ترتيب الحقول؛ فعلى مستهلكي JSON البحث عن المفاتيح حسب أسمائها، لا حسب مواضعها.

اتساق دورة الترميز وفك الترميز

من المفترض أن يمنحكم الترميز ثم فك الترميز جدولًا مكافئًا. وتُعد دورة الذهاب والإياب هذه طريقة جيدة لاختبار تعاملكم مع البيانات.

local json = require("dkjson")
local orig = { a = 1, list = { 2, 3 } }
local copy = json.decode(json.encode(orig))
print(copy.a, copy.list[2])

الترميز باستخدام cjson

توفّر lua-cjson أيضًا الدالة encode. وهي أسرع، لكنها توفر خيارات تنسيق أقل وتطلق أخطاءً بدلًا من إعادتها.

للحصول على إخراج منسّق ذي مسافات بادئة، يكون dkjson عادةً الخيار الأسهل استخدامًا.

local cjson = require("cjson")
local s = cjson.encode({ ok = true, n = 42 })
print(s)

اختبار سريع

اختبروا مدى استيعابكم لترميز جداول Lua.

مراجعة

يحوّل الترميز جداول Lua إلى سلاسل JSON. وتصبح التسلسلات ذات المفاتيح الصحيحة مصفوفات، بينما تصبح الجداول ذات المفاتيح النصية كائنات.

استخدموا json.null للقيم null الحرفية، وحافظوا على اتصال المصفوفات، ومرروا indent = true للحصول على إخراج سهل القراءة. بعد ذلك ستتعاملون مع البيانات المتداخلة بعمق.

الأسئلة الشائعة

هل درس «ترميز الجداول إلى JSON» مجاني؟

نعم — نص درس «ترميز الجداول إلى JSON» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Lua Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Lua Academy 4 دروس في المجموع.

ماذا ستتعلم في «ترميز الجداول إلى JSON»؟

حوّل بيانات Lua إلى صيغة متسلسلة تتمرن على Lua Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Lua Academy؟

لا تُشترط خبرة سابقة. Lua Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «ترميز الجداول إلى JSON»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Lua Academy هذا؟

نعم. كل درس في Lua Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. لماذا JSON
  2. فك ترميز JSON إلى جداول
  3. ترميز الجداول إلى JSON
  4. التعامل مع البيانات المتداخلة
← العودة إلى Lua Academy