فك ترميز JSON إلى جداول
حلّل سلاسل JSON
فك ترميز JSON إلى جداول درس مجاني في Lua Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Lua Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Lua Academy 4 دروس في المجموع.
أساسيات فك الترميز
يحوّل فك الترميز سلسلة JSON إلى قيمة Lua يمكنكم العمل عليها. ونقطة البدء هي json.decode(text).
إذا كان JSON في المستوى الأعلى كائنًا، فستحصلون على جدول Lua ذي مفاتيح نصية، أما إذا كان مصفوفة فستحصلون على جدول ذي فهارس رقمية.
local json = require("dkjson")
local data = json.decode('{"id": 7}')
print(data.id)قراءة حقول الكائنات
يتصرف كائن JSON بعد فك ترميزه مثل أي جدول Lua. ويمكنكم الوصول إلى القيم باستخدام الصياغة النقطية أو صياغة الأقواس.
أما المفاتيح التي ليست معرّفات Lua صالحة، مثل المفاتيح التي تحتوي على مسافات، فتحتاج إلى صياغة الأقواس.
local json = require("dkjson")
local u = json.decode('{"name": "Mia", "full name": "Mia Lee"}')
print(u.name)
print(u["full name"])فك ترميز المصفوفات
تتحول مصفوفة JSON بعد فك ترميزها إلى جدول تسلسلي في Lua مفهرس بدءًا من 1. ويمكنكم تكراره باستخدام ipairs أو حلقة رقمية.
تذكروا أن مصفوفات Lua تبدأ بالفهرس 1، وليس 0.
local json = require("dkjson")
local nums = json.decode('[10, 20, 30]')
for i, v in ipairs(nums) do
print(i, v)
endالأرقام والقيم المنطقية
تتحول أرقام JSON بعد فك ترميزها إلى أرقام Lua، كما تتحول true/false في JSON إلى قيم Lua منطقية.
يمكنكم استخدامها مباشرة في العمليات الحسابية أو الشروط بعد فك الترميز.
local json = require("dkjson")
local d = json.decode('{"qty": 3, "paid": false}')
if not d.paid then
print("unpaid, qty =", d.qty)
endمعالجة null
تُعد null في JSON معقدة قليلًا، لأن nil في Lua تحذف المفتاح من الجدول. وتتعامل المكتبات مع ذلك بطرق مختلفة.
تفكك dkjson ترميز null إلى قيمة مميّزة هي json.null، ولذلك يبقى المفتاح موجودًا. قارنوا بها لاكتشاف قيم null.
local json = require("dkjson")
local d = json.decode('{"mid": null}')
if d.mid == json.null then
print("mid is null")
endفك الترميز من ملف
غالبًا ما توجد بيانات JSON في ملف. اقرأوا الملف كاملًا في سلسلة نصية، ثم فكّوا ترميزها.
يشيع استخدام هذا النمط عند تحميل الإعدادات أو حالة لعبة محفوظة.
local json = require("dkjson")
local f = io.open("config.json", "r")
local text = f:read("*a")
f:close()
local cfg = json.decode(text)
print(cfg.theme)قيم الإرجاع الثلاث
تُعيد decode في dkjson ما يصل إلى ثلاث قيم: النتيجة بعد فك الترميز، والموضع الذي توقف عنده التحليل، ورسالة الخطأ.
عند النجاح تكون النتيجة غير nil، وعند الفشل تكون nil وتوضح القيمة الثالثة السبب.
local json = require("dkjson")
local obj, pos, err = json.decode('{"a":1}')
print(obj.a, pos, err)التحقق من المدخلات
لا تثقوا أبدًا ببيانات JSON الخارجية. تحققوا دائمًا من النتيجة قبل استخدامها، حتى لا تتسبب حمولة غير سليمة في انهيار البرنامج.
local json = require("dkjson")
local function safeDecode(s)
local v, _, err = json.decode(s)
if not v then return nil, err end
return v
endاختلافات cjson
تعمل lua-cjson بطريقة مشابهة، لكنها تثير خطأ عند الإدخال غير الصالح بدلًا من إعادته. غلّفوها داخل pcall لمزيد من الأمان.
تتميز cjson بسرعة أكبر، وهو أمر مهم عند تحليل كميات كبيرة من البيانات.
local cjson = require("cjson")
local ok, data = pcall(cjson.decode, '{"x":1}')
if ok then print(data.x) else print("error") endالمفاتيح المفقودة هي nil
إذا قرأتم مفتاحًا غير موجود في JSON، فستُعيد Lua ببساطة nil. وهذا أمر طبيعي ولا يثير خطأ.
استخدموا قيمة بديلة مع or لتوفير قيم افتراضية للحقول الاختيارية.
local json = require("dkjson")
local d = json.decode('{"name": "Sam"}')
local age = d.age or 0
print(d.name, age)الجداول الفارغة ملتبسة
يتحول كل من كائن JSON الفارغ {} والمصفوفة الفارغة [] إلى جدول Lua فارغ. وبعد فك الترميز، لا يمكنكم معرفة أيهما كان المصدر.
يهم ذلك غالبًا عند إعادة الترميز؛ فضعوا هذا الالتباس في الحسبان عند إجراء تحويل ذهابًا وإيابًا.
تحقق سريع
تحققوا مما تعلّمتموه عن فك ترميز JSON.
مراجعة
يحوّل فك الترميز نص JSON إلى جداول Lua، إذ تتحول الكائنات إلى جداول ذات مفاتيح نصية، وتتحول المصفوفات إلى تسلسلات مفهرسة بدءًا من 1.
تحققوا دائمًا من النتيجة، وعالجوا null باستخدام القيمة المميّزة التي توفرها المكتبة، وتذكروا أن المفاتيح المفقودة تساوي ببساطة nil. بعد ذلك ستتعلّمون ترميز جداول Lua مرة أخرى إلى JSON.
الأسئلة الشائعة
هل درس «فك ترميز JSON إلى جداول» مجاني؟
نعم — نص درس «فك ترميز JSON إلى جداول» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Lua Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Lua Academy 4 دروس في المجموع.
ماذا ستتعلم في «فك ترميز JSON إلى جداول»؟
حلّل سلاسل JSON تتمرن على Lua Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Lua Academy؟
لا تُشترط خبرة سابقة. Lua Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «فك ترميز JSON إلى جداول»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Lua Academy هذا؟
نعم. كل درس في Lua Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- لماذا JSON
- فك ترميز JSON إلى جداول
- ترميز الجداول إلى JSON
- التعامل مع البيانات المتداخلة