Object با مقدارهای متنوع
object با آکولاد و جفتهای name/value ساخته میشود؛ نام propertyها رشتهٔ دونقلقولی است.
{ "name": "Nina", "age": 32, "active": true, "manager": null, "skills": ["TypeScript", "SQL"]}
راهنمای نحو JSON، نوعهای مجاز، رشته و escape، object و array و خواندن و نوشتن امن داده در JavaScript. JSON یک قالب متنی مستقل از زبان برای تبادل داده است. مقدار ریشه میتواند object، array، string، number، boolean یا null باشد؛ propertyهای object نام رشتهای و مقدار معتبر JSON دارند. رشتهٔ JSON با double quote محصور میشود و نویسههای کنترلی باید escape شوند. عددها دهدهیاند؛ قالبهای hexadecimal، NaN و Infinity در JSON معتبر نیستند. از این صفحه بهعنوان مرجع سریع استفاده کنید و مثالها و نکتهها را با نسخهٔ ابزار، نیاز و شرایط واقعی پروژهٔ خود تطبیق دهید.
object با آکولاد و جفتهای name/value ساخته میشود؛ نام propertyها رشتهٔ دونقلقولی است.
{ "name": "Nina", "age": 32, "active": true, "manager": null, "skills": ["TypeScript", "SQL"]}array ترتیب عضوها را حفظ میکند و میتواند شامل object و arrayهای دیگر باشد.
{ "users": [ { "id": 1, "name": "Sara" }, { "id": 2, "name": "Arman" } ], "matrix": [[1, 2], [3, 4]]}JSON فقط string، number، object، array، true، false و null دارد؛ undefined و function نوع JSON نیستند.
{ "text": "hello", "integer": 12, "fraction": 3.14, "enabled": false, "metadata": {}, "items": [], "empty": null}برای کوتیشن، بکاسلش و نویسههای کنترلی escape مناسب بگذارید؛ Unicode escape چهار رقم hex پس از \u دارد.
{ "quote": "She said: \"Hello\"", "path": "C:\\app\\data", "lineBreak": "first\nsecond", "tab": "column1\tcolumn2", "symbol": "\u2605"}عدد JSON میتواند علامت منفی، بخش اعشاری و exponent داشته باشد؛ از leading zero غیرمجاز پرهیز کنید.
{ "whole": 42, "negative": -7, "decimal": 10.25, "scientific": 1.2e3, "zero": 0}کامنت، trailing comma، کلید بدون کوتیشن و single quote جزو نحو JSON نیستند.
// کامنت مجاز نیست{ name: 'Nina', }objectها را برای گروهبندی ویژگیهای مرتبط استفاده کنید و ساختار را بیجهت عمیق نکنید.
{ "user": { "id": "u-42", "profile": { "displayName": "Nina", "locale": "fa" } }}برای فهرست رکوردهای همشکل، array از objectها خوانایی و پیمایش را ساده میکند.
{ "products": [ { "sku": "A-1", "price": 12.5 }, { "sku": "B-2", "price": 8.0 } ]}null مقدار خالی صریح است؛ حذف property معنای متفاوتی با قرار دادن null دارد.
{ "middleName": null}parse را در مرز ورودی با try/catch فراخوانی کنید و پس از آن ساختار مورد انتظار را بررسی کنید.
function parseJson(text) { try { return JSON.parse(text); } catch (error) { console.error("Invalid JSON", error); return null; }}آرگومان سوم indent خروجی خوانا میسازد؛ JSON.stringify برای برخی مقدارهای JavaScript مانند undefined رفتار ویژه دارد.
const payload = { name: "Nina", active: true };const compact = JSON.stringify(payload);const formatted = JSON.stringify(payload, null, 2);برای property معمول از نقطه، برای نام پویا از براکت و برای array از index صفرمبنا استفاده کنید.
const user = { name: "Nina", profile: { city: "Tehran" }, tags: ["admin", "editor"]};user.name;user["profile"].city;user.tags[0];دسترسی به property غایب معمولاً undefined میدهد؛ پیش از دسترسی زنجیرهای، وجود ساختار را کنترل کنید.
const city = user.profile?.city ?? "نامشخص";const firstTag = user.tags?.[0];پس از parse، شکل داده را در زمان اجرا بررسی کنید؛ typeهای ایستا بهتنهایی دادهٔ شبکه را validate نمیکنند.
function isUser(value) { return value !== null && typeof value === "object" && typeof value.id === "string" && typeof value.name === "string";}کد وضعیت HTTP را بررسی کنید؛ پاسخ ناموفق لزوماً Promise را reject نمیکند.
const response = await fetch("/api/users");if (!response.ok) { throw new Error(`HTTP ${response.status}`);}const users = await response.json();رمز، token و دادهٔ شخصی را در log یا فایل عمومی قرار ندهید؛ برای عددهای مالی دقت binary floating point را در نظر بگیرید.
مجاز: string، number، boolean، null، object، arrayنامجاز بهعنوان نوع JSON: undefined، function، Symbolنام propertyها و رشتهها را با double quote بنویسید؛ کامنت و trailing comma در JSON مجاز نیست.
نوعهای معتبر JSON شامل object، array، string، number، boolean و null است.
برای parse ورودی نامطمئن خطا را مدیریت و شکل داده را در زمان اجرا اعتبارسنجی کنید.
JSON.stringify برای انتقال داده است، نه ذخیرهٔ مقدارهای غیر JSON مانند function یا undefined.
هنگام نمایش دادهٔ JSON از تبدیل ناامن متن به HTML خودداری کنید.
JSON syntax را از اعتبارسنجی schema جدا بدانید؛ پس از JSON.parse نوع، فیلدهای لازم و محدودهٔ مقدار را در زمان اجرا بسنجید.
در JSON مقدارهای undefined، function و Symbol وجود ندارند؛ JSON.stringify ممکن است آنها را حذف یا به null تبدیل کند.