تغییرات اخیر

در اینجا اطلاعیه‌ها، نسخه‌ها و تغییرات جدید لیارا فهرست می‌شوند.

آموزش چاپ زیبا (Pretty Print) JSON در پایتون


۳ آبان ۱۴۰۴

JSON (JavaScript Object Notation) ابزار اصلی توسعه‌دهندگان برای تبادل داده در وب است که سبک بودن و خوانایی آن، JSON را برای انتقال داده بین APIها یا پیکربندی برنامه‌ها ایده‌آل کرده است. با این حال، وقتی JSON به شکل فشرده و تک خطی ذخیره می‌شود ،ماشین‌ها مشکلی با پردازش آن ندارند، اما خواندن و دیباگ کردن آن برای توسعه‌دهندگان بسیار دشوار خواهد بود. اینجا بحث چاپ زیبا (Pretty Print) مطرح می‌شود. این روش داده‌های JSON فشرده را به قالبی با تورفتگی مشخص، ساختار روشن و قابل خواندن برای انسان تبدیل می‌کند. در پایتون، ماژول json ابزار اصلی برای انجام این کار است و امکانات ساده‌ای برای تبدیل JSON خام به خروجی مرتب فراهم می‌کند. در ادامه، با تکنیک‌های پایه و عملی چاپ زیبا JSON در پایتون آشنا می‌شوید و خواهید دید چگونه رشته‌های JSON را به خروجی‌های ساختاریافته و قابل خواندن تبدیل کنید.

همین حالا هاست ابری Python رو سفارش بدید و پروژه‌تون رو با سرعت بالا راه‌اندازی کنید!
✅ دامنه رایگان ✅ ترافیک نامحدود ✅ هزینه ساعتی
خرید هاست ابری Python

آنچه در ادامه می‌خوانید:

  • چاپ زیبا (Pretty Print) رشته JSON در پایتون
  • چاپ زیبا (Pretty Print) فایل JSON در پایتون
  • دیباگ پاسخ‌های API
  • لاگ‌گیری داده‌های ساختاریافته
  • بهبود خوانایی فایل‌های پیکربندی
  • جمع بندی
  • سوالات متداول
آموزش چاپ زیبا (Pretty Print) JSON در پایتون

چاپ زیبا (Pretty Print) رشته JSON در پایتون

برای تبدیل داده‌های JSON به رشته‌ای با فرمت زیبا، می‌توانید از متد dumps() ماژول json به صورت زیر استفاده کنید:

import json

json_data = '[{"ID":10,"Name":"Pankaj","Role":"CEO"},' \
            '{"ID":20,"Name":"David Lee","Role":"Editor"}]'

json_object = json.loads(json_data)

json_formatted_str = json.dumps(json_object, indent=2)

print(json_formatted_str)

این کد، JSON قالب‌بندی‌شده را به‌عنوان خروجی به صورت زیر چاپ می‌کند:

[
  {
    "ID": 10,
    "Name": "Pankaj",
    "Role": "CEO"
  },
  {
    "ID": 20,
    "Name": "David Lee",
    "Role": "Editor"
  }
]

در کد بالا:

  • ابتدا با استفاده از متد json.loads() رشته‌ی JSON را به یک شیء JSON تبدیل می‌کنیم.
  • سپس متد json.dumps() این شیء را گرفته و یک رشته‌ی JSON قالب‌بندی‌شده برمی‌گرداند.
  • پارامتر indent نیز میزان تورفتگی (Indent Level) رشته‌ی قالب‌بندی‌شده را مشخص می‌کند.
هاست پایتون چیست؟ + راهنمای کامل خرید هاست Python
خرید هاست پایتون

چاپ زیبا (Pretty Print) فایل JSON در پایتون

در این قسمت، بیایید ببینیم وقتی داده‌های یک فایل JSON را چاپ می‌کنیم چه اتفاقی می‌افتد. داده‌های این فایل در قالب چاپ زیبا (Pretty Printed) ذخیره شده‌اند.

import json

with open('Cars.json', 'r') as json_file:
    json_object = json.load(json_file)

print(json_object)

print(json.dumps(json_object))

print(json.dumps(json_object, indent=1))

خروجی:

[{'Car Name': 'Honda City', 'Car Model': 'City', 'Car Maker': 'Honda', 'Car Price': '20,000 USD'}, {'Car Name': 'Bugatti Chiron', 'Car Model': 'Chiron', 'Car Maker': 'Bugatti', 'Car Price': '3 Million USD'}]
[{"Car Name": "Honda City", "Car Model": "City", "Car Maker": "Honda", "Car Price": "20,000 USD"}, {"Car Name": "Bugatti Chiron", "Car Model": "Chiron", "Car Maker": "Bugatti", "Car Price": "3 Million USD"}]
[
 {
  "Car Name": "Honda City",
  "Car Model": "City",
  "Car Maker": "Honda",
  "Car Price": "20,000 USD"
 },
 {
  "Car Name": "Bugatti Chiron",
  "Car Model": "Chiron",
  "Car Maker": "Bugatti",
  "Car Price": "3 Million USD"
 }
]

از خروجی پیداست که برای نمایش JSON به‌صورت چاپ زیبا (Pretty Printed) باید مقدار indent را مشخص کنیم.

دیباگ پاسخ‌های API

زمانی که یک درخواست به API ارسال می‌کنید، معمولاً پاسخ JSON را در قالب یک خط طولانی دریافت می‌کنید تا پهنای باند کمتری مصرف شود. این حالت برای ماشین‌ها مناسب است، اما خواندن و درک آن برای انسان‌ها، زمانی که داده‌ها پیچیده یا چندلایه باشند، بسیار دشوار خواهد بود.

در چنین شرایطی، چاپ زیبا (Pretty Print) داده‌های خام و ناخوانا را به قالبی ساختارمند، تورفته و قابل‌خواندن تبدیل می‌کند. این کار باعث می‌شود بررسی داده‌ها، پیدا کردن فیلدهای جا افتاده یا شناسایی خطاهای غیرمنتظره بسیار ساده‌تر شود.

در این قسمت یک نمونه کد برای دریافت پاسخ از یک API و چاپ زیبا (Pretty Print) محتوای آن آورده‌ایم. برای تست، از API سرویس JSONPlaceholder استفاده می‌کنیم:

import requests
import json

url = "https://jsonplaceholder.typicode.com/posts/1"
response = requests.get(url)

if response.status_code == 200:
    data = response.json()
    print(json.dumps(data))
    print(json.dumps(data, indent=2))
else:
    print(f"Error: {response.status_code}")

این کد، خروجی JSON قالب‌بندی‌شده را به‌شکل زیر چاپ خواهد کرد:

{"userId": 1, "id": 1, "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit", "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"}

{
  "userId": 1,
  "id": 1,
  "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
  "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
}

همان‌طور که می‌بینید، JSON چاپ‌شده به‌صورت زیبا (Pretty Print) خواناتر است و دیباگ کردن آن بسیار ساده‌تر می‌شود.

لاگ‌گیری داده‌های ساختاریافته

پیام‌های لاگ سنتی معمولاً به‌صورت متن ساده ذخیره می‌شوند. اما زمانی که نیاز دارید رخدادهای پیچیده، اقدامات کاربر یا وضعیت سیستم را ثبت کنید، مثل یک درخواست کامل، جزئیات یک خطا یا رکورد داده پردازش‌شده. نمایش آن‌ها در قالب یک رشته JSON فشرده و بدون فرمت، خواندن و تحلیل لاگ‌ها را بسیار دشوار می‌کند.

استفاده از چاپ زیبا (Pretty Print) برای JSON در لاگ‌ها باعث می‌شود اطلاعات ثبت‌شده فوراً قابل درک باشند. این موضوع به‌ویژه هنگام مرور دستی فایل‌های لاگ یا در شرایطی که از ابزارهای جمع‌آوری و تحلیل لاگ استفاده می‌کنید (که همیشه JSON را به‌طور خودکار فرمت نمی‌کنند) اهمیت بیشتری پیدا می‌کند.

این روش بیشتر برای محیط‌های توسعه محلی مناسب است. اما در محیط‌های پروداکشن، بهتر است از یک سیستم مدیریت لاگ مثل ELK، Splunk یا DataDog استفاده کنید تا داده‌ها را به فیلدهای قابل جست‌وجو تجزیه و تحلیل کند. این رویکرد برای حجم‌های بالای داده و پردازش‌های خودکار بسیار کارآمدتر است.

چگونه یک اسکریپت پایتون را در اوبونتو اجرا کنیم
اسکریپت پایتون

بهبود خوانایی فایل‌های پیکربندی

فایل‌های پیکربندی (Configuration Files) ستون فقرات بسیاری از برنامه‌ها هستند و تنظیمات، اتصال به پایگاه داده، کلیدهای API و موارد دیگر را مشخص می‌کنند. اگرچه بسیاری از این فایل‌ها به‌صورت دستی نوشته می‌شوند و معمولاً قالب‌بندی مناسبی دارند، اما چاپ زیبا (Pretty Print) JSON در شرایط زیر بسیار ارزشمند است:

  • زمانی که یک اسکریپت یا برنامه فایل پیکربندی JSON ایجاد یا ویرایش می‌کند، ممکن است آن را به‌صورت فشرده (minified) ذخیره کند. استفاده از Pretty Print تضمین می‌کند که فایل ذخیره‌شده برای ویرایش یا بررسی دستی بعدی قابل خواندن باشد.
  • اگر فایل پیکربندی JSON را از منبع خارجی دریافت کنید، Pretty Print سریعاً ساختار و محتوای آن را آشکار می‌کند و اعتبارسنجی نسبت به انتظارات را ساده‌تر می‌سازد.
  • هنگام اعمال تغییرات روی یک فایل پیکربندی JSON، چاپ زیبا با تورفتگی منظم (و در صورت تمایل مرتب‌سازی کلیدها) باعث می‌شود تفاوت‌ها در سیستم‌های کنترل نسخه مانند Git تمیز و قابل فهم باشند، به‌طوری که تنها تغییرات واقعی محتوا نمایش داده شود و تغییرات صرفاً مربوط به فرمت حذف شوند.

جمع بندی

چاپ زیبا (Pretty Print) JSON تنها برای زیباتر کردن ظاهر داده‌ها نیست، بلکه یک تکنیک قدرتمند برای افزایش خوانایی و بهبود فرآیند دیباگ است. با استفاده از ماژول‌های json.dumps() و pprint در پایتون، می‌توانید خروجی را به‌سرعت قالب‌بندی کنید تا وضوح بیشتری پیدا کند. این قابلیت تنها محدود به نمایش ساده داده‌ها نیست و در زمینه‌هایی مانند دیباگ پاسخ‌های API، لاگ‌گیری داده‌های ساختاریافته و بهبود خوانایی فایل‌های پیکربندی نیز بسیار کاربردی است. این یک تغییر کوچک با تأثیر بزرگ در تجربه توسعه شما محسوب می‌شود.

سوالات متداول

۱. بهترین روش برای ایجاد تورفتگی در خروجی JSON در پایتون چیست؟

بهترین و ساده‌ترین روش برای ایجاد تورفتگی در خروجی JSON در پایتون، استفاده از پارامتر indent در تابع json.dumps() است.

import json

data = {"name": "Alice", "age": 30, "hobbies": ["reading", "chess", "hiking"]}

# Indent JSON output by 4 spaces
json_string = json.dumps(data, indent=4)
print(json_string)

۲. تفاوت بین json.dumps() و pprint چیست؟

تابع json.dumps() اشیاء پایتون (مثل دیکشنری یا لیست) را به یک رشته با فرمت JSON تبدیل می‌کند. می‌توان از json.dumps() زمانی استفاده کرد که بخواهید داده‌های پایتون را به یک رشته JSON معتبر سریال‌سازی کنید. تابع pprint() هر ساختار داده‌ای پایتون را به‌صورت خوانا چاپ می‌کند؛ معمولاً برای دیباگ یا نمایش اشیاء پایتون تو در تو در قالبی قابل فهم استفاده می‌شود.

۳. آیا ابزاری وجود دارد که بتواند JSON را به‌صورت خودکار در اسکریپت‌های پایتون چاپ زیبا کند؟

چندین ابزار برای چاپ خودکار JSON به‌صورت زیبا در اسکریپت‌های پایتون وجود دارد. در اینجا چند گزینه آورده شده است:

می‌توانید از json.tool در ترمینال برای چاپ زیبا JSON از یک فایل یا ورودی استاندارد استفاده کنید:

python -m json.tool input.json

ابزار jq نیز یک گزینه قدرتمند و سریع برای قالب‌بندی و پرس‌وجوی داده‌های JSON است:

jq . input.json

ابتدا باید با استفاده از دستور زیر، jq را نصب کنید:

pip install jq

بسیاری از ویرایشگرها مانند VS Code، PyCharm و Sublime Text دارای فرمت‌کننده‌های JSON داخلی یا مبتنی بر افزونه هستند که می‌توانید از آن‌ها استفاده کنید.

به اشتراک بگذارید

برچسب‌ها: