Whiz Tools

فرمت دهنده JSON

با این ابزار ساده JSON خود را فرمت و زیبا کنید

JSON فرمت شده اینجا ظاهر خواهد شد...

فرمت‌دهنده JSON

مقدمه

JSON (JavaScript Object Notation) یک فرمت سبک برای تبادل داده است که به استانداردی برای تبادل داده در برنامه‌های وب تبدیل شده است. با وجود سادگی‌اش، داده‌های JSON می‌توانند زمانی که فشرده یا فاقد فرمت مناسب باشند، دشوار برای خواندن شوند. این ابزار به شما کمک می‌کند تا رشته‌های JSON خام و بدون فرمت را به یک فرمت ساختاریافته و با فاصله‌های مناسب تبدیل کنید که خواندن و تحلیل آن بسیار آسان‌تر است.

فرمت‌دهی JSON (که به عنوان "زیبا چاپ کردن" نیز شناخته می‌شود) فاصله‌گذاری، خط‌های جدید و فاصله‌های منظم را اضافه می‌کند تا ساختار سلسله‌مراتبی داده‌های JSON به‌طور بصری قابل مشاهده باشد. این موضوع به‌ویژه زمانی ارزشمند است که با اشیاء یا مجموعه‌های تو در تو پیچیده یا مجموعه‌های بزرگ کار می‌کنید که در غیر این صورت روابط بین عناصر ممکن است دشوار باشد.

ابزار فرمت‌دهنده JSON ما یک رابط ساده برای زیبا کردن داده‌های JSON شما با فاصله‌گذاری مناسب و ساختار فراهم می‌کند و در عین حال اعتبار آن را برای ماشین‌ها حفظ می‌کند.

نحو و ساختار JSON

JSON بر اساس دو ساختار اصلی ساخته شده است:

  1. اشیاء: مجموعه‌ای از جفت‌های نام/مقدار که در براکت‌های منحنی {} قرار دارند. هر نام با یک دو نقطه : دنبال می‌شود و جفت‌ها با کاما , جدا می‌شوند.
   {"name": "جان", "age": 30, "city": "نیویورک"}
   
  1. آرایه‌ها: لیست‌های مرتب از مقادیر که در براکت‌های مربعی [] قرار دارند. مقادیر با کاما , جدا می‌شوند.
   ["سیب", "موز", "گیلاس"]
   

مقادیر JSON می‌توانند باشند:

  • رشته‌ها (در علامت‌های نقل قول دوگانه): "سلام دنیا"
  • اعداد: 42 یا 3.14159
  • بولی‌ها: true یا false
  • تهی: null
  • اشیاء: {"key": "value"}
  • آرایه‌ها: [1, 2, 3]

JSON معتبر باید از این قوانین نحوی پیروی کند:

  • نام‌ها باید رشته‌هایی در علامت‌های نقل قول دوگانه باشند
  • مقادیر باید یکی از انواع داده‌های معتبر JSON باشند
  • هیچ کامای اضافی در انتها مجاز نیست
  • هیچ نظری مجاز نیست
  • هیچ تابع یا متدی مجاز نیست

اشکالات رایج نحوی شامل موارد زیر است:

  • براکت‌ها/براکت‌های منحنی گمشده یا نادرست
  • نقل قول‌های گمشده در اطراف نام‌های خاصیت
  • استفاده از نقل قول‌های تک به جای نقل قول‌های دوگانه
  • وجود کاماهای اضافی
  • استفاده از مقادیر نامشخص به عنوان مقدار

نحوه کار فرمت‌دهی JSON

فرمت‌دهی JSON، JSON فشرده و بدون فرمت را به یک فرم قابل خواندن‌تر تبدیل می‌کند با:

  1. تحلیل: رشته JSON ابتدا تحلیل می‌شود تا اطمینان حاصل شود که معتبر است و نمایی از داده‌ها در حافظه ایجاد شود.

  2. فاصله‌گذاری: هر سطح تو در تو از اشیاء و آرایه‌ها با فاصله (معمولاً ۲ یا ۴ فاصله) برای نمایان کردن سلسله‌مراتب بصری فاصله‌گذاری می‌شود.

  3. خط‌های جدید: خطوط جدید پس از هر خاصیت یا عنصر آرایه اضافه می‌شوند تا خوانایی بهبود یابد.

  4. فاصله‌ها: فاصله‌های منظم در اطراف دو نقطه و کاما اضافه می‌شود.

برای مثال، این JSON فشرده:

{"name":"جان دو","age":30,"address":{"street":"خیابان ۱۲۳","city":"شهر هرکجا","state":"CA"},"hobbies":["خواندن","کوهنوردی","عکاسی"]}

به این JSON فرمت شده تبدیل می‌شود:

{
  "name": "جان دو",
  "age": 30,
  "address": {
    "street": "خیابان ۱۲۳",
    "city": "شهر هرکجا",
    "state": "CA"
  },
  "hobbies": [
    "خواندن",
    "کوهنوردی",
    "عکاسی"
  ]
}

فرمت‌دهنده ما از فاصله‌گذاری استاندارد ۲ فاصله برای هر سطح استفاده می‌کند که یک کنوانسیون رایج در جامعه توسعه‌دهندگان است و تعادل خوبی بین فشردگی و خوانایی فراهم می‌کند.

اعتبارسنجی JSON

یک جنبه حیاتی از فرمت‌دهی JSON اعتبارسنجی است. قبل از اینکه JSON فرمت‌دهی شود، باید از نظر نحوی معتبر باشد بر اساس مشخصات JSON. اشکالات رایج اعتبارسنجی شامل:

  1. اشکالات نحوی:

    • نام‌های خاصیت بدون نقل قول
    • کاماهای گمشده یا اضافی
    • ساختارهای تو در تو نادرست
    • رشته‌ها، اشیاء یا آرایه‌های بدون بسته
  2. اشکالات نوع داده:

    • استفاده از مقادیر خاص جاوااسکریپت مانند undefined یا NaN
    • شامل توابع یا متدها
    • استفاده از نقل قول‌های تک برای رشته‌ها

زمانی که با JSON نامعتبر مواجه می‌شوید، پیام خطا می‌تواند به شناسایی مشکل کمک کند. بیشتر تجزیه‌کننده‌های JSON محل وقوع خطا را نشان می‌دهند که می‌تواند به پیدا کردن مشکل کمک کند. ابزار ما پیام‌های خطای واضحی را برای کمک به شناسایی و رفع مشکلات در داده‌های JSON شما فراهم می‌کند.

موارد استفاده

فرمت‌دهی JSON در سناریوهای متعددی ارزشمند است:

توسعه و آزمایش API

زمانی که با APIهای RESTful کار می‌کنید، JSON فرمت شده خواندن را آسان‌تر می‌کند:

  • بازرسی بارهای پاسخ
  • اشکال‌زدایی بدنه‌های درخواست
  • مستندسازی مثال‌های API
  • تأیید اینکه ساختار داده‌ها با انتظارات مطابقت دارد

مدیریت پیکربندی

بسیاری از برنامه‌های مدرن از JSON برای پیکربندی استفاده می‌کنند:

  • فایل‌های تنظیمات برنامه
  • پیکربندی‌های محیطی
  • مشخصات ساخت و استقرار
  • الگوهای زیرساخت به عنوان کد (به عنوان مثال، AWS CloudFormation، Terraform)

تحلیل و تجسم داده‌ها

فرمت‌دهی JSON زمانی کمک می‌کند که:

  • کاوش در مجموعه‌های داده
  • آماده‌سازی داده‌ها برای تجزیه و تحلیل
  • درک طرح‌های داده
  • شناسایی الگوها در داده‌های ساختاریافته

اشکال‌زدایی و رفع مشکلات

فرمت‌دهی مناسب JSON زمانی ضروری است که:

  • اشکال‌زدایی برنامه‌های وب
  • بازرسی localStorage یا sessionStorage
  • تحلیل پاسخ‌های شبکه
  • رفع مشکلات در ادغام داده‌ها

اهداف آموزشی

فرمت‌دهی واضح JSON برای:

  • آموزش ساختارهای داده
  • نمایش روابط تو در تو
  • توضیح مفاهیم API
  • نشان دادن اصول مدل‌سازی داده‌ها ارزشمند است.

گزینه‌های دیگر

در حالی که فرمت‌دهنده آنلاین JSON ما برای کارهای سریع فرمت‌دهی مناسب است، چندین گزینه دیگر برای سناریوهای مختلف وجود دارد:

ابزارهای توسعه‌دهنده مرورگر

مرورگرهای مدرن شامل قابلیت‌های فرمت‌دهی JSON هستند:

  • ابزارهای توسعه‌دهنده Chrome و Edge به طور خودکار پاسخ‌های JSON را در برگه شبکه فرمت می‌کنند
  • بیننده JSON فایرفاکس یک نمای درختی تعاملی را فراهم می‌کند
  • افزونه‌های مرورگر مانند JSONView می‌توانند JSON را مستقیماً در مرورگر فرمت دهند

ویرایشگرها و IDEهای کد

بیشتر محیط‌های توسعه دارای فرمت‌دهی JSON هستند:

  • Visual Studio Code دارای فرمت‌دهی JSON داخلی است (Alt+Shift+F)
  • IDEهای JetBrains (WebStorm، IntelliJ) شامل ابزارهای JSON قدرتمند هستند
  • Sublime Text و Atom از طریق افزونه‌ها از فرمت‌دهی JSON پشتیبانی می‌کنند

ابزارهای خط فرمان

برای کاربران ترمینال یا اتوماسیون:

  • jq یک پردازشگر JSON سبک و انعطاف‌پذیر در خط فرمان است
  • json_pp در بسیاری از سیستم‌های یونیکس به‌طور پیش‌فرض نصب شده است
  • python -m json.tool برای فرمت‌دهی سریع با استفاده از پایتون فراهم می‌شود

رویکردهای برنامه‌نویسی

هنگامی که JSON را در برنامه‌ها فرمت می‌کنید:

// فرمت‌دهی JSON در جاوااسکریپت
const formatted = JSON.stringify(jsonObject, null, 2);
# فرمت‌دهی JSON در پایتون
import json
formatted = json.dumps(json_object, indent=2)
// فرمت‌دهی JSON در جاوا با Gson
Gson gson = new GsonBuilder().setPrettyPrinting().create();
String formatted = gson.toJson(jsonObject);
# فرمت‌دهی JSON در روبی
require 'json'
formatted = JSON.pretty_generate(json_object)
// فرمت‌دهی JSON در PHP
$formatted = json_encode($jsonObject, JSON_PRETTY_PRINT);

تاریخچه

JSON توسط داگلاس کروفورد در اوایل دهه ۲۰۰۰ به عنوان یک جایگزین سبک برای XML ایجاد شد. این فرمت از نحو شیء جاوااسکریپت مشتق شده است اما به‌طور مستقل از زبان طراحی شده است. در سال ۲۰۰۶، JSON به‌طور رسمی در RFC 4627 مشخص شد و به سرعت به دلیل سادگی و سازگاری‌اش با جاوااسکریپت محبوبیت پیدا کرد.

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

پذیرش JSON با ظهور AJAX و APIهای RESTful در اوایل دهه ۲۰۰۰ شتاب گرفت. تا دهه ۲۰۱۰، این فرمت به استانداردی برای APIهای وب، فایل‌های پیکربندی و ذخیره‌سازی داده در پایگاه‌های داده NoSQL مانند MongoDB و CouchDB تبدیل شده بود.

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

مثال‌های کد

در اینجا مثال‌هایی از نحوه فرمت‌دهی JSON در زبان‌های مختلف برنامه‌نویسی آورده شده است:

// فرمت‌دهی JSON در جاوااسکریپت
function formatJSON(jsonString) {
  try {
    const parsedData = JSON.parse(jsonString);
    return JSON.stringify(parsedData, null, 2);
  } catch (error) {
    return `خطا: ${error.message}`;
  }
}

// مثال استفاده
const rawJSON = '{"name":"جان","age":30,"city":"نیویورک"}';
console.log(formatJSON(rawJSON));
# فرمت‌دهی JSON در پایتون
import json

def format_json(json_string):
    try:
        parsed_data = json.loads(json_string)
        return json.dumps(parsed_data, indent=2)
    except json.JSONDecodeError as e:
        return f"خطا: {str(e)}"

# مثال استفاده
raw_json = '{"name":"جان","age":30,"city":"نیویورک"}'
print(format_json(raw_json))
// فرمت‌دهی JSON در جاوا با Gson
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonSyntaxException;

public class JSONFormatter {
    public static String formatJSON(String jsonString) {
        try {
            Gson gson = new GsonBuilder().setPrettyPrinting().create();
            Object parsedJson = gson.fromJson(jsonString, Object.class);
            return gson.toJson(parsedJson);
        } catch (JsonSyntaxException e) {
            return "خطا: " + e.getMessage();
        }
    }
    
    public static void main(String[] args) {
        String rawJSON = "{\"name\":\"جان\",\"age\":30,\"city\":\"نیویورک\"}";
        System.out.println(formatJSON(rawJSON));
    }
}
// فرمت‌دهی JSON در PHP
function formatJSON($jsonString) {
    $result = json_decode($jsonString);
    if (json_last_error() !== JSON_ERROR_NONE) {
        return "خطا: " . json_last_error_msg();
    }
    return json_encode($result, JSON_PRETTY_PRINT);
}

// مثال استفاده
$rawJSON = '{"name":"جان","age":30,"city":"نیویورک"}';
echo formatJSON($rawJSON);
# فرمت‌دهی JSON در روبی
require 'json'

def format_json(json_string)
  begin
    parsed_data = JSON.parse(json_string)
    return JSON.pretty_generate(parsed_data)
  rescue JSON::ParserError => e
    return "خطا: #{e.message}"
  end
end

# مثال استفاده
raw_json = '{"name":"جان","age":30,"city":"نیویورک"}'
puts format_json(raw_json)
// فرمت‌دهی JSON در C# با Newtonsoft.Json
using Newtonsoft.Json;
using System;

class JSONFormatter
{
    public static string FormatJSON(string jsonString)
    {
        try
        {
            object parsedJson = JsonConvert.DeserializeObject(jsonString);
            return JsonConvert.SerializeObject(parsedJson, Formatting.Indented);
        }
        catch (JsonException e)
        {
            return $"خطا: {e.Message}";
        }
    }
    
    static void Main()
    {
        string rawJSON = "{\"name\":\"جان\",\"age\":30,\"city\":\"نیویورک\"}";
        Console.WriteLine(FormatJSON(rawJSON));
    }
}
// فرمت‌دهی JSON در Go
package main

import (
    "encoding/json"
    "fmt"
)

func formatJSON(jsonString string) string {
    var parsedData interface{}
    err := json.Unmarshal([]byte(jsonString), &parsedData)
    if err != nil {
        return fmt.Sprintf("خطا: %s", err.Error())
    }
    
    formattedBytes, err := json.MarshalIndent(parsedData, "", "  ")
    if err != nil {
        return fmt.Sprintf("خطا: %s", err.Error())
    }
    
    return string(formattedBytes)
}

func main() {
    rawJSON := `{"name":"جان","age":30,"city":"نیویورک"}`
    fmt.Println(formatJSON(rawJSON))
}

موارد و چالش‌های خاص

هنگام کار با فرمت‌دهی JSON، از این چالش‌های بالقوه آگاه باشید:

فایل‌های بزرگ JSON

فایل‌های بسیار بزرگ JSON (چند مگابایت یا بیشتر) می‌توانند در فرمت‌دهنده‌های مبتنی بر مرورگر مشکلات عملکردی ایجاد کنند. برای چنین مواردی:

  • استفاده از ابزارهای خط فرمان مانند jq را در نظر بگیرید
  • JSON را به بخش‌های کوچکتر تقسیم کنید
  • از تجزیه‌کننده‌های جریانی برای پردازش بدون بارگذاری کل فایل در حافظه استفاده کنید

ساختارهای بسیار تو در تو

JSONهای بسیار تو در تو (بیش از ۱۰-۲۰ سطح) حتی زمانی که فرمت شده‌اند می‌توانند دشوار باشند. در این موارد:

  • اگر ممکن است، ساختار را صاف کنید
  • از بیننده‌های JSON قابل جمع شدن استفاده کنید
  • بخش‌های خاصی از JSON را استخراج و کار کنید

کاراکترهای خاص و یونیکد

JSON از یونیکد پشتیبانی می‌کند، اما برخی از فرمت‌دهنده‌ها ممکن است با کاراکترهای خاصی مشکل داشته باشند:

  • اطمینان حاصل کنید که فرمت‌دهنده شما به درستی با اموجی و سایر کاراکترهای یونیکد برخورد می‌کند
  • با کاراکترهای کنترلی و توالی‌های فرار احتیاط کنید
  • تأیید کنید که خروجی فرمت شده تمام کاراکترهای اصلی را حفظ می‌کند

دقت عددی

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

  • آگاه باشید که برخی از پیاده‌سازی‌های جاوااسکریپت ممکن است دقت را برای اعداد فراتر از ۵۳ بیت از دست بدهند
  • در صورت نیاز به دقت بالا، از نمایش‌های رشته‌ای برای مقادیر عددی دقیق استفاده کنید
  • با مقادیر افراطی آزمایش کنید اگر برنامه شما به دقت بالایی نیاز دارد

اشیاء و آرایه‌های خالی

JSON معتبر شامل اشیاء خالی {} و آرایه‌های خالی [] است که باید به درستی فرمت شوند:

  • اشیاء خالی باید به صورت {}
  • آرایه‌های خالی باید به صورت []
  • ساختارهای تو در تو خالی باید فاصله‌گذاری مناسب را حفظ کنند

مراجع

  1. JSON.org - وب‌سایت رسمی مشخصات JSON
  2. RFC 8259 - فرمت تبادل داده JSON
  3. MDN Web Docs: JSON - مستندات جامع در مورد JSON در جاوااسکریپت
  4. JSON Lint - یک اعتبارسنجی آنلاین JSON محبوب
  5. jq - یک پردازشگر JSON سبک و انعطاف‌پذیر در خط فرمان
Feedback