0Pricing
Lua Academy · درس

التعامل مع البيانات المتداخلة

اعمل مع البنى المعقدة

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

البيانات المتداخلة موجودة في كل مكان

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

في Lua يعني هذا وجود جداول داخل جداول. والخبر الجيد أن دالتي فك الترميز والترميز تتعاملان مع التداخل تلقائيًا.

كائن داخل كائن

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

local json = require("dkjson")
local d = json.decode('{"user": {"name": "Eve", "age": 30}}')
print(d.user.name)
print(d.user.age)

مصفوفة من الكائنات

من البنى الشائعة جدًا مصفوفة JSON من الكائنات، مثل قائمة من السجلات. وتُفك هذه البنية إلى تسلسل من الجداول.

استخدموا ipairs للتكرار، واقرؤوا الحقول من كل عنصر.

local json = require("dkjson")
local d = json.decode('[{"id":1},{"id":2}]')
for _, item in ipairs(d) do
  print(item.id)
end

الوصول إلى البيانات المتداخلة بعمق

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

لكن إذا كان أي مستوى وسيط مفقودًا، فسيؤدي التسلسل إلى الخطأ 'attempt to index a nil value'.

local json = require("dkjson")
local d = json.decode('{"a":{"b":{"c": 42}}}')
print(d.a.b.c)

الوصول الآمن إلى البيانات المتداخلة

لتجنب التعطل عند فقدان بعض المستويات، تحققوا من كل خطوة، أو استخدموا التقييم المختصر بواسطة and.

يتوقف تسلسل and عند أول قيمة nil ويعيد nil بدلًا من إطلاق خطأ.

local json = require("dkjson")
local d = json.decode('{"a":{}}')
local c = d.a and d.a.b and d.a.b.c
print(c)  -- nil, no crash

التكرار على المصفوفات المتداخلة

يمكن للمصفوفات أن تحتوي على كائنات تحتوي بدورها على مزيد من المصفوفات. اجعلوا حلقات التكرار المتداخلة مطابقة لبنية البيانات.

local json = require("dkjson")
local d = json.decode('[{"tags":["a","b"]}]')
for _, rec in ipairs(d) do
  for _, tag in ipairs(rec.tags) do
    print(tag)
  end
end

إنشاء جداول متداخلة

لترميز JSON متداخل، ما عليكم سوى تداخل جداول Lua. إذ يتنقل المرمّز عبر البنية كاملةً بطريقة递归ية.

local json = require("dkjson")
local t = {
  user = { name = "Jo", roles = { "admin", "editor" } }
}
print(json.encode(t, { indent = true }))

تعديل القيم المتداخلة

يمكنكم قراءة الحقول وتغييرها وإضافتها على أي عمق قبل إعادة الترميز. وهذا هو جوهر تحويل البيانات.

local json = require("dkjson")
local d = json.decode('{"cfg":{"volume":5}}')
d.cfg.volume = 8
d.cfg.muted = false
print(json.encode(d))

دمج المصفوفات والكائنات

يخلط JSON بحرية بين المصفوفات والكائنات على مستويات مختلفة. وتعكس Lua ذلك باستخدام جداول التسلسلات والجداول ذات المفاتيح المتداخلة معًا.

احرصوا فقط على أن يكون كل جدول منسجمًا، فيمثل بنية واحدة منهما لا مزيجًا بينهما.

local json = require("dkjson")
local t = {
  team = "red",
  members = { { id = 1 }, { id = 2 } }
}
print(json.encode(t))

استكشاف البنى غير المعروفة

عندما لا تعرفون البنية مسبقًا، استخدموا type() لفحص كل قيمة، وطبّقوا الاستدعاء الذاتي على الجداول.

يتيح لكم ذلك كتابة معالجات عامة لأي JSON عشوائي البنية.

local function walk(v)
  if type(v) == "table" then
    for k, sub in pairs(v) do walk(sub) end
  else
    print(v)
  end
end

انتبهوا إلى null داخل البيانات المتداخلة

حتى قيمة null الموجودة بعمق داخل البيانات المتداخلة تُفك في dkjson إلى json.null. تعاملوا معها عند استكشاف البنى حتى لا تخلطوا بينها وبين جدول أو قيمة فعلية.

local json = require("dkjson")
local d = json.decode('{"a":{"b": null}}')
if d.a.b == json.null then
  print("b is null")
end

اختبار سريع

اختبروا مدى إتقانكم للتعامل مع JSON المتداخل في Lua.

مراجعة

تتحول بنية JSON المتداخلة إلى جداول داخل جداول؛ وتتولى دالتا فك الترميز والترميز معالجة الاستدعاء الذاتي نيابةً عنكم.

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

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

هل درس «التعامل مع البيانات المتداخلة» مجاني؟

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

ماذا ستتعلم في «التعامل مع البيانات المتداخلة»؟

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

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

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

كم من الوقت يستغرق درس «التعامل مع البيانات المتداخلة»؟

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

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

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

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

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