✍️ متن JSON معتبر میتونه به شیء، آرایه، عدد یا حتی null تبدیل بشه. پس دو سؤال داریم: آیا متن قابل تجزیه است و آیا نتیجه شکل مورد نظر برنامه را دارد؟ JSON.parse برای متن خراب خطا ایجاد میکنه؛ با try/catch میتونیم به جای متوقف شدن کل برنامه، یک نتیجه جایگزین روشن برگردونیم.
مثلاً متن '{"theme":"dark"}' یک شیء تنظیمات میده، اما '[1,2]' با اینکه JSON معتبره، تنظیمات شیئی این تمرین نیست. null هم نوع ویژهای دارد: عبارت typeof null برابر 'object' است، بنابراین بررسی typeof بهتنهایی کافی نیست. آرایه را هم باید جدا با Array.isArray تشخیص بدیم.
در تمرین، برای هر ورودی نامناسب یک شیء خالی برگردون. لازم نیست خطا را چاپ کنی یا مقدار ورودی را حدس بزنی. خطای رایج، قرار دادن فقط بخش return در try یا نداشتن بررسی شکل نتیجه است؛ هم خود parse و هم استفاده از نتیجه باید با قرارداد هماهنگ باشند. تنظیمات دارای مقدار صفر یا false معتبرند و باید بدون تغییر حفظ شوند.
فعالیت شما
parseSettings(text) را اصلاح کن. text رشته است. اگر JSON معتبر و نتیجه شیء غیرnull و غیرآرایه بود، همان نتیجه را برگردان. برای متن خراب، null، آرایه و مقدار اولیه مانند عدد یا رشته، {} بده؛ '{"count":0}' => {count:0} و 'خراب' => {}.