✍️ یک راه ساده برای بررسی درست بودن تبدیل، رفتوبرگشت است: داده را به متن JSON تبدیل کن و سپس همان متن را بخوان. اگر داده از نوعهای پشتیبانیشده JSON باشد، نتیجه خواندن باید همان ساختار اولیه را بدهد. اینجا کلیدهای دیکشنری رشتهاند و عددها صحیحاند تا تبدیل نوع غیرمنتظره نداشته باشیم.
مثلاً {'کالا':'مداد','تعداد':2} به متن JSON با فارسی خوانا تبدیل میشود و بعد دوباره یک دیکشنری با همان دو مقدار میدهد. برای خروجی تکرارپذیر، کلیدها را با sort_keys=True مرتب میکنیم؛ این ترتیب صرفاً برای نمایش ثابت است، نه رتبهبندی معنایی داده.
تابع ناقص باید هم متن تولیدشده و هم داده بازخوانیشده را تحویل بدهد. قالب جداکنندهها همان پیشفرض json.dumps میماند؛ فاصلههای دلخواه اضافه نکن. خطای رایج، باقی گذاشتن ensure_ascii در حالت پیشفرض یا استفاده از eval برای خواندن متن است؛ json.loads دقیقاً ابزار همین قالب است. فهرست خالی، None و ساختارهای تو در تو هم داده JSON مجازند. در این گام رشته در حافظه است؛ نوشتن فایل را در درس بعد انجام میدهیم.
تابع آماده course_check از ورودی کپی عمیق میگیرد، تابع اصلی را اجرا میکند و تغییر ورودی را رد میکند؛ آن را نگه دار و فقط تابع اصلی را کامل کن.
فعالیت شما
تابع json_snapshot(data) داده JSONپذیر با کلیدهای رشتهای و عددهای صحیح میگیرد؛ text=json.dumps(data,ensure_ascii=False,sort_keys=True) با جداکنندههای پیشفرض بساز، سپس loads همان text را اجرا کن و {'text':text,'decoded':نتیجه} بده. None و فهرست/دیکشنری خالی و داده تو در تو مجازند؛ ورودی تغییر نکند. برای {'نام':'سارا'} متن دقیق '{"نام": "سارا"}' است. course_check آماده را نگه دار؛ این تابع تغییر ورودی را رد و همان خروجی اصلی را برمیگرداند.