کتابخانه‌ی استاندارد · کدگذاری و داده

جیسون encoding/json

ساختن و خواندن جیسون: از رشته‌ی ساده تا تبدیل خودکار ساختارها و خواندن جریانی.

واردسازی کدگذاری.جیسون

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

نام کلید هر فیلد را با @جیسون "name" بالای فیلد تعیین کنید؛ @جیسون "-" فیلد را کنار می‌گذارد. بدون آن، نام خود فیلد کلید می‌شود.

این بسته را برای رابط‌های برنامه‌نویسی، پرونده‌های تنظیمات و هر چیزی که برنامه‌ی دیگری می‌خواند به کار ببرید. همسایه‌هایش: یامل و تامل برای پرونده‌هایی که آدم‌ها ویرایش می‌کنند، مسج‌پک وقتی داده باید کوچک و دودویی باشد، و تبدیل قالب برای خواندن یا نوشتن یک ساختار در چند قالب.

اشتباه‌های رایج:

  • دریافت عدد یک صحیح ۳۲ بیتی برمی‌گرداند و هر عدد بزرگ‌تر را به سقف می‌رساند: 3000000000 به شکل 2147483647 برمی‌گردد. برای شناسه‌ها و برچسب‌های زمانی، فیلد را با واسریال سازی در یک صحیح۶۴ بخوانید یا متن دریافت را تجزیه کنید.
  • دریافت، دریافت عدد و دارد فقط سطح بالای شیء را نگاه می‌کنند. برای مقدارهای تودرتو دریافت مسیر را به کار ببرید، مثل دریافت مسیر(متن، "user.address.city").
  • سخت‌گیر یا آسان‌گیر. واسریال سازی با فیلد جاافتاده، کلید ناشناخته یا گونه‌ی ناجور شکست می‌خورد؛ واسریال سازی آسان گیر برای فیلدهای جاافتاده پیش‌فرض ساختار را نگه می‌دارد و کلیدهای ناشناخته را رد می‌کند، ولی گونه‌ی نادرست باز هم خطاست.
  • ترتیب کلیدها. سریال سازی فیلدها را به ترتیب ساختار می‌نویسد، و شیء یک مقدار کدگشایی‌شده ترتیب متن را نگه می‌دارد و کدگذاری کلیدها را به همان ترتیب می‌نویسد؛ اگر خروجی باید الفبایی باشد، چیدن کلیدها را به کدگذاری بدهید.

راهنما: بارگذاری پرونده‌ی پیکربندی در یک ساختار

پرونده‌ی پیکربندی رایج‌ترین جیسونی است که یک برنامه می‌خواند. آن را با ساختارها توصیف کنید، به هر فیلد مقدار پیش‌فرض دلخواه بدهید و بگذارید واسریال سازی آسان گیر هر چه را پرونده دارد پر کند. شیء‌های تودرتو به ساختارهای تودرتو و آرایه‌ها به فیلدهای وکتور نگاشته می‌شوند.

encoding-json-guide-config.salam
واردسازی کدگذاری.جیسون
واردسازی کدگذاری.خطای کدگذاری

ساختار پایگاه‌داده:
    @جیسون "host"
    همگانی میزبان: رشته = "localhost"
    @جیسون "port"
    همگانی درگاه: صحیح = ۵۴۳۲
    @جیسون "pool"
    همگانی استخر: صحیح = ۴
پایان

ساختار پیکربندی:
    @جیسون "name"
    همگانی نام: رشته = "app"
    @جیسون "debug"
    همگانی اشکال زدایی: منطقی = نادرست
    @جیسون "db"
    همگانی پایگاه: پایگاه‌داده = پایگاه‌داده {}
    @جیسون "admins"
    همگانی مدیران: وکتور<رشته> = وکتور {}
پایان

تابع ریشه:
    متن := `{
  "name": "shop",
  "db": {"host": "db.internal", "port": 6432},
  "admins": ["sara", "reza"]
}`
    ناپایا پیکر := پیکربندی {}
    ناپایا خطا := خطای کدگذاری.بدون خطا()
    اگر وارونه جیسون.واسریال سازی آسان گیر(متن، پیکر، خطا):
        سرچاپ "پیکربندی خراب است:"، خطا.پیام
        برگشت ۱
    پایان
    سرچاپ "نام:"، پیکر.نام
    سرچاپ "اشکال‌زدایی:"، پیکر.اشکال زدایی
    سرچاپ "پایگاه‌داده:"، پیکر.پایگاه.میزبان، پیکر.پایگاه.درگاه، "استخر"، پیکر.پایگاه.استخر
    سرچاپ "مدیران:"، پیکر.مدیران.طول()، پیکر.مدیران.بگیر(۰)، پیکر.مدیران.بگیر(۱)
پایان
خروجینام: shop اشکال‌زدایی: false پایگاه‌داده: db.internal 6432 استخر 4 مدیران: 2 sara reza

پرونده debug و db.pool را نداشت، پس این دو مقدار پیش‌فرضشان را نگه داشتند. دلیل استفاده از نسخه‌ی آسان‌گیر همین است: واسریال سازی ساده سخت‌گیر است و اگر فیلدی نباشد با missing key 'pool' و اگر پرونده کلیدی داشته باشد که ساختار ندارد با unknown key شکست می‌خورد. سخت‌گیری برای پیام‌های میان برنامه‌ها درست است، جایی که نبودن یک فیلد یعنی اشکال؛ آسان‌گیری برای پرونده‌هایی که آدم‌ها با دست ویرایش می‌کنند. برای خواندن پرونده از دیسک، متن پرونده.خواندن همه از بسته‌ی پرونده را بدهید.

راهنما: ساختن پاسخ یک API

در جهت دیگر، سریال سازی یک ساختار را به جیسون فشرده برای فرستادن و سریال سازی با تورفتگی به جیسون خوانا برای گزارش‌ها و پرونده‌ها تبدیل می‌کند. یک وکتور از ساختارها آرایه‌ای از شیء‌ها می‌شود، نقل‌قول‌های درون رشته گریزانده می‌شوند و ترتیب فیلدها همان ترتیب ساختار است.

encoding-json-guide-response.salam
واردسازی کدگذاری.جیسون

ساختار کالا:
    @جیسون "sku"
    همگانی شناسه: رشته = ""
    @جیسون "title"
    همگانی عنوان: رشته = ""
    @جیسون "price_cents"
    همگانی قیمت: صحیح = ۰
    @جیسون "in_stock"
    همگانی موجود: منطقی = درست
پایان

ساختار صفحه‌نتایج:
    @جیسون "page"
    همگانی شماره: صحیح = ۱
    @جیسون "total"
    همگانی کل: صحیح = ۰
    @جیسون "items"
    همگانی کالاها: وکتور<کالا> = وکتور {}
    @جیسون "-"
    همگانی نهان: رشته = ""
پایان

تابع ریشه:
    ناپایا ص := صفحه‌نتایج { شماره = ۲، کل = ۱۴، نهان = "products:2" }
    ص.کالاها.بیفزا(کالا { شناسه = "BK-01"، عنوان = "Notebook"، قیمت = ۱۲۵۰ })
    ص.کالاها.بیفزا(کالا { شناسه = "PN-07"، عنوان = "Pen \"fine\""، قیمت = ۳۰۰، موجود = نادرست })

    سرچاپ جیسون.سریال سازی(ص)
    سرچاپ جیسون.سریال سازی با تورفتگی(ص، "  ")
پایان
خروجی{"page":2,"total":14,"items":[{"sku":"BK-01","title":"Notebook","price_cents":1250,"in_stock":true},{"sku":"PN-07","title":"Pen \"fine\"","price_cents":300,"in_stock":false}]} { "page": 2, "total": 14, "items": [ { "sku": "BK-01", "title": "Notebook", "price_cents": 1250, "in_stock": true }, { "sku": "PN-07", "title": "Pen \"fine\"", "price_cents": 300, "in_stock": false } ] }

@جیسون "price_cents" نام فیلد را در جیسون عوض می‌کند بی‌آنکه نامش در کد عوض شود، و @جیسون "-" فیلدهای درونی مثل کلید حافظه‌ی نهان را از خروجی بیرون نگه می‌دارد. برای گذرواژه‌ها و توکن‌ها هم از آن استفاده کنید تا هرگز ناخواسته در پاسخی نشت نکنند. در برنامه‌های فارسی، @جیسون راه نگه داشتن کلیدهای انگلیسی با نام‌های فارسی فیلدهاست.

راهنما: کاوش جیسونی با شکل ناشناخته

وقتی شکل داده را از پیش نمی‌دانید، مثلاً وب‌هوکی از سرویسی دیگر، کدگشایی درختی از گره‌های مقدار می‌دهد. از هر گره بپرسید چیست، با رشته است، صحیح است، شیء است و بقیه، و سپس آن را با تابع «به ...» متناظر بخوانید.

encoding-json-guide-dynamic.salam
واردسازی کدگذاری.جیسون
واردسازی کدگذاری.مقدار
واردسازی کدگذاری.خطای کدگذاری
واردسازی رشته

تابع شرح(م: مقدار.مقدار): رشته:
    اگر مقدار.رشته است(م): برگشت "رشته " + مقدار.به رشته(م) پایان
    اگر مقدار.صحیح است(م): برگشت "صحیح " + رشته.از عدد(مقدار.به صحیح(م)) پایان
    اگر مقدار.اعشاری است(م): برگشت "اعشاری " + رشته.از اعشار(مقدار.به اعشاری(م)) پایان
    اگر مقدار.منطقی است(م):
        اگر مقدار.به منطقی(م): برگشت "منطقی درست" پایان
        برگشت "منطقی نادرست"
    پایان
    اگر مقدار.آرایه است(م): برگشت "آرایه با " + رشته.از عدد(مقدار.طول آرایه(م)) + " عضو" پایان
    اگر مقدار.شیء است(م): برگشت "شیء با " + رشته.از عدد(مقدار.طول شیء(م)) + " کلید" پایان
    برگشت "تهی"
پایان

تابع ریشه:
    ناپایا خطا := خطای کدگذاری.بدون خطا()
    سند := جیسون.کدگشایی(`{"id": 7, "name": "Lamp", "price": 19.5, "sale": true, "tags": ["home", "light"], "size": {"w": 20, "h": 45}, "note": null}`، خطا)
    اگر خطای کدگذاری.خطا است(خطا):
        سرچاپ "خطای تجزیه:"، خطا.پیام
        برگشت ۱
    پایان
    سرچاپ "کلیدها:"، مقدار.طول شیء(سند)
    کلیدها := ["id"، "name"، "price"، "sale"، "tags"، "size"، "note"، "color"]
    هر ک در کلیدها:
        اگر وارونه مقدار.شیء دارد(سند، ک):
            سرچاپ ک، "وجود ندارد"
            گذر
        پایان
        سرچاپ ک، "="، شرح(مقدار.مقدار کلید(سند، ک))
    پایان
    اندازه := مقدار.مقدار کلید(سند، "size")
    سرچاپ "مساحت:"، مقدار.به صحیح(مقدار.مقدار کلید(اندازه، "w")) * مقدار.به صحیح(مقدار.مقدار کلید(اندازه، "h"))
پایان
خروجیکلیدها: 7 id = صحیح 7 name = رشته Lamp price = اعشاری 19.5 sale = منطقی درست tags = آرایه با 2 عضو size = شیء با 2 کلید note = تهی color وجود ندارد مساحت: 900

عددهای صحیح به شکل صحیح و عددهای کسری به شکل اعشاری برمی‌گردند؛ عدد است هر دو را می‌پذیرد. شیء کدگشایی‌شده کلیدهایش را به ترتیب متن نگه می‌دارد، ولی فرستنده آزاد است آن ترتیب را عوض کند، پس مثل همین برنامه فهرستی از کلیدهای مورد انتظار را بپیمایید و برای کلیدهای اختیاری از شیء دارد استفاده کنید.

راهنما: گزارش ورودی خراب

هر تابع کدگشایی یک خطای کدگذاری از بسته‌ی خطای کدگذاری می‌گیرد. وقتی شکست بخورد، message می‌گوید چه اشکالی بوده و position جایگاه بایتی است که خواننده آنجا ایستاده، همان چیزی که به کاربر نشان می‌دهید. تابع‌های متنی مثل دریافت هرگز شکست نمی‌خورند و برای کلید نبوده رشته‌ی خالی برمی‌گردانند، پس هر جا مهم است اول با دارد یا معتبر بررسی کنید.

encoding-json-guide-errors.salam
واردسازی کدگذاری.جیسون
واردسازی کدگذاری.خطای کدگذاری

ساختار ثبت‌نام:
    @جیسون "email"
    همگانی رایانامه: رشته = ""
    @جیسون "age"
    همگانی سن: صحیح = ۰
پایان

تابع بارگذاری(متن: رشته):
    ناپایا ث := ثبت‌نام {}
    ناپایا خطا := خطای کدگذاری.بدون خطا()
    اگر جیسون.واسریال سازی(متن، ث، خطا):
        سرچاپ "درست:"، ث.رایانامه، ث.سن
    وگرنه:
        سرچاپ "خطا در جایگاه"، خطا.موقعیت، "->"، خطا.پیام
    پایان
پایان

تابع بارگذاری آسان گیر(متن: رشته):
    ناپایا ث := ثبت‌نام {}
    ناپایا خطا := خطای کدگذاری.بدون خطا()
    اگر جیسون.واسریال سازی آسان گیر(متن، ث، خطا):
        سرچاپ "آسان‌گیر درست:"، ث.رایانامه، ث.سن
    پایان
پایان

تابع ریشه:
    بارگذاری(`{"email": "[email protected]", "age": 31}`)
    بارگذاری(`{"email": "[email protected]", "age": "31"}`)
    بارگذاری(`{"email": "[email protected]", "age": 31`)
    بارگذاری(`{"email": "[email protected]", "age": 31, "plan": "pro"}`)
    بارگذاری آسان گیر(`{"email": "[email protected]", "age": 31, "plan": "pro"}`)

    سرچاپ "معتبر:"، جیسون.معتبر(`[1, 2, 3]`)، جیسون.معتبر(`[1, 2,]`)
    سرچاپ "کلید نبوده [" + جیسون.دریافت(`{"a": 1}`، "b") + "] می‌دهد"
پایان
خروجیدرست: [email protected] 31 خطا در جایگاه 34 -> value does not match the expected type خطا در جایگاه 36 -> expected ',' or '}' خطا در جایگاه 46 -> unknown key آسان‌گیر درست: [email protected] 31 معتبر: true false کلید نبوده [] می‌دهد

راهنما: جریان جیسون سطربه‌سطر

گزارش‌ها و خروجی‌ها اغلب در هر سطر یک مقدار جیسون دارند (NDJSON). کدگشا آن‌ها را یکی‌یکی می‌خواند: باز هم می‌گوید مقدار دیگری مانده یا نه و کدگشایی بعدی را برمی‌گرداند. کدگشای رشته از یک رشته می‌خواند و کدگشای جدید از یک پرونده‌ی باز. کدگذارها هم همین قالب را می‌نویسند، در هر سطر یک مقدار.

encoding-json-guide-ndjson.salam
واردسازی کدگذاری.جیسون
واردسازی کدگذاری.مقدار

تابع ریشه:
    گزارش‌ها := `{"level": "info", "msg": "started", "ms": 3}
{"level": "warn", "msg": "slow query", "ms": 820}
{"level": "info", "msg": "request", "ms": 41}
{"level": "error", "msg": "timeout", "ms": 5000}
{"level": "info", "msg": "request", "ms": 37}
`
    ناپایا شمارش := نگاشت {} برگردان نگاشت<رشته، صحیح>
    ناپایا کند := ۰
    ناپایا خواننده := جیسون.کدگشای رشته(گزارش‌ها)
    تا خواننده.باز هم():
        خط := خواننده.کدگشایی()
        سطح := مقدار.به رشته(مقدار.مقدار کلید(خط، "level"))
        شمارش.درج(سطح، شمارش.دریافت با پیش فرض(سطح، ۰) + ۱)
        اگر مقدار.به صحیح(مقدار.مقدار کلید(خط، "ms")) > ۵۰۰:
            کند += ۱
        پایان
    پایان
    سرچاپ "info:"، شمارش.دریافت با پیش فرض("info"، ۰)، "warn:"، شمارش.دریافت با پیش فرض("warn"، ۰)، "error:"، شمارش.دریافت با پیش فرض("error"، ۰)
    سرچاپ "کندتر از ۵۰۰ میلی‌ثانیه:"، کند

    ناپایا نویسنده := جیسون.کدگذار حافظه()
    نویسنده.کدگذاری(مقدار.مقدار رشته("summary"))
    نویسنده.کدگذاری(مقدار.مقدار صحیح(کند))
    سرچاپ نویسنده.متن()
    نویسنده.بستن()
پایان
خروجیinfo: 3 warn: 1 error: 1 کندتر از ۵۰۰ میلی‌ثانیه: 2 "summary" 2

تا خواننده.باز هم(): همان‌طور خوانده می‌شود که کار می‌کند: «تا وقتی باز هم هست»، چون تا در سلام تا وقتی شرطش درست است اجرا می‌شود.

کدام تابع برای کدام کار

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

گونه‌ها

گزینه‌های جیسون JSONOptions

ساختار گزینه‌های جیسون
گزینه‌های کدگذاری.
نامانگلیسیگونهتوضیح
تورفتگیindentرشته = ""واحد تورفتگی؛ خالی یعنی یک خط.
چیدن کلیدهاsort_keysمنطقی = نادرستکلیدها به ترتیب الفبا نوشته شوند. بدون آن، کلیدها به ترتیبی نوشته می‌شوند که شیء نگه داشته است: ترتیب افزوده شدن یا کدگشایی.
چشم‌پوشی از تهیignore_nullمنطقی = نادرستکلیدهای با مقدار تهی نوشته نشوند.
encoding-json-Value.salam
واردسازی کدگذاری.جیسون
واردسازی کدگذاری.مقدار
واردسازی کدگذاری.خطای کدگذاری
واردسازی سیستم پرونده.پرونده

تابع ریشه:
    ناپایا خ := خطای کدگذاری.بدون خطا()
    م := جیسون.کدگشایی(`{"city": "تهران", "zones": [1, 2, 22]}`، خ)
    سرچاپ خطای کدگذاری.خطا است(خ)، مقدار.به رشته(مقدار.مقدار کلید(م، "city"))
    سرچاپ جیسون.کدگذاری پیش فرض(م)
    گ := جیسون.گزینه‌های جیسون { تورفتگی = "  "، چیدن کلیدها = درست }
    سرچاپ جیسون.کدگذاری(م، گ)
    _ := جیسون.کدگشایی("[1, 2"، خ)
    سرچاپ خطای کدگذاری.خطا است(خ)، خ.موقعیت
    ناپایا ک := جیسون.کدگذار حافظه()
    ک.کدگذاری(مقدار.مقدار صحیح(۱))
    ک.کدگذاری(مقدار.مقدار رشته("دو"))
    سرچاپ ک.متن()
    ک.بستن()
    ناپایا ت := جیسون.کدگذار حافظه با تورفتگی("  ")
    ت.کدگذاری(م)
    سرچاپ ت.متن()
    ت.بستن()
    ن := پرونده.بازکردن("lines.ndjson"، "wb")
    ناپایا پن := جیسون.کدگذار جدید(ن)
    پن.کدگذاری(مقدار.مقدار صحیح(۱۰))
    پن.کدگذاری(مقدار.مقدار صحیح(۲۰))
    پن.بستن()
    ناپایا پت := جیسون.کدگذار جدید با تورفتگی(پرونده.بازکردن("pretty.json"، "wb")، "\t")
    پت.کدگذاری(م)
    پت.بستن()
    ناپایا خوان := جیسون.کدگشای جدید(پرونده.بازکردن("lines.ndjson"، "rb"))
    ناپایا جمع := ۰ برگردان صحیح۶۴
    تا خوان.باز هم():
        جمع += مقدار.به صحیح(خوان.کدگشایی())
    پایان
    سرچاپ جمع
    ناپایا گ۲ := جیسون.کدگشای رشته("{\"a\": 1}\n{\"a\": 2}\n")
    تا گ۲.باز هم():
        سرچاپ جیسون.کدگذاری پیش فرض(گ۲.کدگشایی())
    پایان
پایان
خروجیfalse تهران {"city": "تهران", "zones": [1, 2, 22]} { "city": "تهران", "zones": [ 1, 2, 22 ] } true 5 1 "دو" { "city": "تهران", "zones": [ 1, 2, 22 ] } 30 {"a": 1} {"a": 2}

کدگذار جیسون JSONEncoder

ساختار کدگذار جیسون
نویسنده‌ی جریانی: چند مقدار جیسون را پشت‌سرهم، هر کدام در یک خط، می‌نویسد.
نامانگلیسیگونهتوضیح
مقصدdstپرونده*پرونده‌ی مقصد، اگر در پرونده می‌نویسد.
روی پروندهuseFileمنطقی = نادرستآیا در پرونده می‌نویسد یا در حافظه.
انبارbufرشته.StringBuilderحافظه‌ی متن، وقتی در حافظه می‌نویسد.
تورفتگیindentرشته = ""واحد تورفتگی؛ خالی یعنی هر مقدار در یک خط.
شمارcountصحیح = 0تعداد مقدارهای نوشته‌شده.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: encoding-json-Value.salam

کدگذاری Encode

تابع کدگذاری(v: value.Value): منطقی
یک مقدار را می‌نویسد و خط تازه‌ای پس از آن می‌گذارد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: encoding-json-Value.salam

متن String

تابع متن(): رشته
متن نوشته‌شده در حافظه.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: encoding-json-Value.salam

بستن Close

تابع بستن()
نویسنده را می‌بندد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: encoding-json-Value.salam

کدگشای جیسون JSONDecoder

ساختار کدگشای جیسون
خواننده‌ی جریانی: مقدارهای جیسون پشت‌سرهم را یکی‌یکی می‌خواند، مثل پرونده‌های JSON Lines.
نامانگلیسیگونهتوضیح
منبعsrcپرونده*پرونده‌ی منبع.
روی پروندهuseFileمنطقی = نادرستآیا از پرونده می‌خواند.
انبارbufرشته = ""متن خوانده‌شده.
جایگاهposصحیح = 0جای فعلی در متن.
خوانده شدهloadedمنطقی = نادرستآیا پرونده خوانده شده.
پایان پروندهeofمنطقی = نادرستبه انتهای متن رسیده.
خرابbadمنطقی = نادرستخطایی در خواندن رخ داده.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: encoding-json-Value.salam

باز هم More

تابع باز هم(): منطقی
اگر مقدار دیگری مانده باشد، درست برمی‌گرداند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: encoding-json-Value.salam

کدگشایی Decode

تابع کدگشایی(): value.Value
مقدار بعدی را می‌خواند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: encoding-json-Value.salam

تابع‌ها

کدگشایی Decode

تابع کدگشایی(text: رشته، err &: encerr.EncodingError): value.Value
جیسون را به یک مقدار پویا تبدیل می‌کند؛ اگر خطایی باشد، err پر می‌شود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: encoding-json-Value.salam

کدگذاری Encode

تابع کدگذاری(v: value.Value، opts: گزینه‌های جیسون): رشته
یک مقدار را با گزینه‌های داده‌شده به جیسون تبدیل می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: encoding-json-Value.salam

کدگذاری پیش فرض EncodeDefault

تابع کدگذاری پیش فرض(v: value.Value): رشته
یک مقدار را با گزینه‌های پیش‌فرض به جیسون تبدیل می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: encoding-json-Value.salam

پوشش طرحواره SchemaEnvelope

تابع پوشش طرحواره<T>(v: T): رشته
طرحواره‌ی JSON Schema گونه‌ی مقدار را، همراه با تعریف گونه‌های تو‌در‌تو، در یک پوشش می‌سازد تا بعد با ادغام طرحواره ترکیب شود.
encoding-json-Marshal.salam
واردسازی کدگذاری.جیسون
واردسازی کدگذاری.خطای کدگذاری

ساختار کاربر:
    @جیسون "name"
    همگانی نام: رشته = ""
    @جیسون "age"
    همگانی سن: صحیح = ۰
    @جیسون "tags"
    همگانی برچسب‌ها: وکتور<رشته> = وکتور {}
    @جیسون "-"
    همگانی گذرواژه: رشته = ""
پایان

تابع ریشه:
    ناپایا ک := کاربر { نام = "مریم"، سن = ۲۸، گذرواژه = "راز" }
    ک.برچسب‌ها.بیفزا("مدیر")
    سرچاپ جیسون.سریال سازی(ک)
    سرچاپ جیسون.سریال سازی با تورفتگی(ک، "  ")
    ناپایا خوانده := کاربر {}
    ناپایا خ := خطای کدگذاری.بدون خطا()
    سرچاپ جیسون.واسریال سازی(`{"name": "رضا", "age": 41, "tags": ["a", "b"]}`، خوانده، خ)
    سرچاپ خوانده.نام، خوانده.سن، خوانده.برچسب‌ها.طول()
    سرچاپ جیسون.واسریال سازی(`{"name": "رضا", "age": "چهل"}`، خوانده، خ)، خ.پیام
    ناپایا آسان := کاربر {}
    سرچاپ جیسون.واسریال سازی آسان گیر(`{"name": "سارا", "extra": 1}`، آسان، خ)، آسان.نام
    سرچاپ جیسون.طرحواره(ک)
    پوشش := جیسون.پوشش طرحواره(ک)
    سرچاپ جیسون.ادغام طرحواره(پوشش) == جیسون.طرحواره(ک)
پایان
خروجی{"name":"مریم","age":28,"tags":["مدیر"]} { "name": "مریم", "age": 28, "tags": [ "مدیر" ] } true رضا 41 2 false value does not match the expected type true سارا {"$schema":"https://json-schema.org/draft/2020-12/schema","$defs":{"کاربر":{"title":"کاربر","type":"object","properties":{"name":{"type":"string"},"age":{"type":"integer","format":"int32"},"tags":{"type":"array","items":{"type":"string"}}},"required":["name","age","tags"],"additionalProperties":false}},"$ref":"#/$defs/کاربر"} true

طرحواره Schema

تابع طرحواره<T>(v: T): رشته
طرحواره‌ی JSON Schema کامل گونه‌ی مقدار؛ برای مستندسازی API یا اعتبارسنجی در سمت دیگر.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: encoding-json-Marshal.salam

ادغام طرحواره SchemaMerge

تابع ادغام طرحواره(envelope: رشته): رشته
چند پوشش طرحواره را در یک سند با تعریف‌های مشترک ادغام می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: encoding-json-Marshal.salam

کدگذار جدید NewEncoder

تابع کدگذار جدید(f: پرونده*): کدگذار جیسون
نویسنده‌ای که در پرونده‌ی باز می‌نویسد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: encoding-json-Value.salam

کدگذار جدید با تورفتگی NewEncoderIndent

تابع کدگذار جدید با تورفتگی(f: پرونده*، unit: رشته): کدگذار جیسون
نویسنده‌ی پرونده با تورفتگی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: encoding-json-Value.salam

کدگذار حافظه NewBufEncoder

تابع کدگذار حافظه(): کدگذار جیسون
نویسنده‌ای که در حافظه می‌نویسد؛ متن را با متن بگیرید.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: encoding-json-Value.salam

کدگذار حافظه با تورفتگی NewBufEncoderIndent

تابع کدگذار حافظه با تورفتگی(unit: رشته): کدگذار جیسون
نویسنده‌ی حافظه با تورفتگی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: encoding-json-Value.salam

کدگشای جدید NewDecoder

تابع کدگشای جدید(f: پرونده*): کدگشای جیسون
خواننده‌ای که از پرونده‌ی باز می‌خواند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: encoding-json-Value.salam

کدگشای رشته NewBufDecoder

تابع کدگشای رشته(s: رشته): کدگشای جیسون
خواننده‌ای که از یک رشته می‌خواند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: encoding-json-Value.salam

معتبر Valid

تابع معتبر(text: رشته): منطقی
اگر متن جیسون درستی باشد، درست برمی‌گرداند.
encoding-json-Build.salam
واردسازی کدگذاری.جیسون

تابع ریشه:
    ناپایا برچسب‌ها := وکتور {} برگردان وکتور<رشته>
    برچسب‌ها.بیفزا(جیسون.رشته جیسون("سلام"))
    برچسب‌ها.بیفزا(جیسون.رشته جیسون(`خط "نقل"`))
    ناپایا اعضا := وکتور {} برگردان وکتور<رشته>
    اعضا.بیفزا(جیسون.عضو("name"، "علی"))
    اعضا.بیفزا(جیسون.عضو عدد("age"، ۳۰))
    اعضا.بیفزا(جیسون.عضو منطقی("admin"، نادرست))
    اعضا.بیفزا(جیسون.عضو اعشار("score"، ۱۸.۵))
    اعضا.بیفزا(جیسون.عضو خام("tags"، جیسون.آرایه(برچسب‌ها)))
    متن := جیسون.شیء(اعضا)
    سرچاپ متن
    سرچاپ جیسون.معتبر(متن)، جیسون.معتبر("{ناقص")
    سرچاپ جیسون.دریافت(متن، "name")، جیسون.دریافت عدد(متن، "age")، جیسون.دریافت اعشار(متن، "score")
    سرچاپ جیسون.دارد(متن، "admin")، جیسون.دارد(متن، "email")، جیسون.کلیدها(متن)
    سرچاپ جیسون.اسکیپ("یک\tدو")
    زیبا := جیسون.تورفتگی(متن)
    سرچاپ زیبا
    سرچاپ جیسون.فشرده سازی(زیبا) == جیسون.فشرده سازی(متن)
    سرچاپ جیسون.تورفتگی چهار(`{"a":1}`)
    سرچاپ جیسون.تورفتگی تب(`{"a":1}`) == "{\n\t\"a\": 1\n}"، جیسون.تورفتگی سفارشی(`[1]`، "--")
    تودرتو := `{"user":{"tags":["a","b"],"name":"Ali"}}`
    سرچاپ جیسون.دریافت مسیر(تودرتو، "user.name")، جیسون.دریافت مسیر(تودرتو، "user.tags.1")، جیسون.اقلام(جیسون.دریافت مسیر(تودرتو، "user.tags")).طول()
    سرچاپ جیسون.حذف نقل قول(`"\u0633\u0644\u0627\u0645"`)
پایان
خروجی{"name": "علی", "age": 30, "admin": false, "score": 18.5, "tags": ["سلام", "خط \"نقل\""]} true false علی 30 18.5 true false ["name", "age", "admin", "score", "tags"] یک\tدو { "name": "علی", "age": 30, "admin": false, "score": 18.5, "tags": [ "سلام", "خط \"نقل\"" ] } true { "a": 1 } true [ --1 ] Ali b 2 سلام

دریافت Get

تابع دریافت(text: رشته، key: رشته): رشته
مقدار یک کلید سطح بالا را به شکل متن برمی‌گرداند؛ رشته‌ها بدون نقل‌قول.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: encoding-json-Build.salam

اسکیپ Escape

تابع اسکیپ(s: رشته): رشته
نویسه‌های خاص رشته را برای جیسون اسکیپ می‌کند، بدون نقل‌قول دور آن.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: encoding-json-Build.salam

فشرده سازی Minify

تابع فشرده سازی(text: رشته): رشته
همه‌ی فاصله‌های اضافه را برمی‌دارد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: encoding-json-Build.salam

عضو Member

تابع عضو(key: رشته، value: رشته): رشته
یک جفت کلید و رشته، مثل "name": "علی"، برای ساختن شیء.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: encoding-json-Build.salam

دریافت عدد GetInt

تابع دریافت عدد(text: رشته، key: رشته): صحیح
مقدار یک کلید سطح بالا به شکل صحیح. مقدارهای بیش از ۳۲ بیت به سقف می‌رسند؛ برای عددهای بزرگ واسریال سازی در یک صحیح۶۴ را به کار ببرید.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: encoding-json-Build.salam

دریافت اعشار GetFloat

تابع دریافت اعشار(text: رشته، key: رشته): اعشار۶۴
مقدار اعشاری یک کلید سطح بالا.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: encoding-json-Build.salam

دارد Has

تابع دارد(text: رشته، key: رشته): منطقی
اگر کلید سطح بالا وجود داشته باشد، درست برمی‌گرداند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: encoding-json-Build.salam

عضو عدد MemberInt

تابع عضو عدد(key: رشته، value: صحیح۶۴): رشته
جفت کلید و عدد صحیح.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: encoding-json-Build.salam

عضو منطقی MemberBool

تابع عضو منطقی(key: رشته، value: منطقی): رشته
جفت کلید و مقدار منطقی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: encoding-json-Build.salam

عضو اعشار MemberFloat

تابع عضو اعشار(key: رشته، value: اعشار۶۴): رشته
جفت کلید و عدد اعشاری.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: encoding-json-Build.salam

عضو خام MemberRaw

تابع عضو خام(key: رشته، raw: رشته): رشته
جفت کلید و جیسون آماده، مثل یک آرایه یا شیء دیگر.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: encoding-json-Build.salam

رشته جیسون Str

تابع رشته جیسون(value: رشته): رشته
رشته را با نقل‌قول و اسکیپ به مقدار جیسون تبدیل می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: encoding-json-Build.salam

شیء Object

تابع شیء(members: وکتور<رشته>): رشته
جفت‌های ساخته‌شده را در یک شیء {...} کنار هم می‌گذارد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: encoding-json-Build.salam

آرایه Array

تابع آرایه(items: وکتور<رشته>): رشته
مقدارها را در یک آرایه‌ی [...] کنار هم می‌گذارد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: encoding-json-Build.salam

تورفتگی سفارشی IndentWith

تابع تورفتگی سفارشی(text: رشته، unit: رشته): رشته
جیسون را با واحد تورفتگی دلخواه خوانا می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: encoding-json-Build.salam

تورفتگی تب IndentTabs

تابع تورفتگی تب(text: رشته): رشته
جیسون را با تب خوانا می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: encoding-json-Build.salam

تورفتگی Indent

تابع تورفتگی(text: رشته): رشته
جیسون را با دو فاصله خوانا می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: encoding-json-Build.salam

تورفتگی چهار Indent4

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

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: encoding-json-Build.salam

کلیدها Keys

تابع کلیدها(text: رشته): وکتور<رشته>
کلیدهای شیء سطح بالا، به ترتیب متن.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: encoding-json-Build.salam

اقلام Items

تابع اقلام(text: رشته): وکتور<رشته>
متن خام هر عضو یک آرایه‌ی سطح بالا، آماده برای دریافت یا دوباره اقلام.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: encoding-json-Build.salam

حذف نقل قول Unquote

تابع حذف نقل قول(raw: رشته): رشته
یک توکن رشته‌ی JSON خام را با گریزها کدگشایی می‌کند؛ هر چیز دیگر بی‌تغییر برمی‌گردد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: encoding-json-Build.salam

دریافت مسیر GetPath

تابع دریافت مسیر(text: رشته، path: رشته): رشته
یک مسیر نقطه‌دار را در شیءها و آرایه‌ها دنبال می‌کند، مانند hits.hits.0._source؛ رشته‌ها کدگشایی شده برمی‌گردند، بقیه به صورت JSON خام، و گام ناموجود رشته‌ی خالی می‌دهد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: encoding-json-Build.salam

سریال سازی Marshal

تابع سریال سازی<T>(v: T): رشته
هر مقدار سلام را، از عدد و رشته تا ساختار و وکتور و نگاشت، به جیسون فشرده تبدیل می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: encoding-json-Marshal.salam

سریال سازی با تورفتگی MarshalIndent

تابع سریال سازی با تورفتگی<T>(v: T، unit: رشته): رشته
مثل سریال سازی، با تورفتگی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: encoding-json-Marshal.salam

واسریال سازی Unmarshal

تابع واسریال سازی<T>(text: رشته، out &: T، err &: encerr.EncodingError): منطقی
جیسون را در ساختار out می‌ریزد. همه‌ی فیلدها باید با گونه‌ی جور حاضر باشند و کلید ناشناخته هم خطاست؛ در صورت شکست، err پر می‌شود و نادرست برمی‌گردد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: encoding-json-Marshal.salam

واسریال سازی آسان گیر UnmarshalLenient

تابع واسریال سازی آسان گیر<T>(text: رشته، out &: T، err &: encerr.EncodingError): منطقی
مثل واسریال سازی، ولی کلیدهای ناشناخته رد می‌شوند و فیلدهای جاافتاده مقدار قبلی‌شان را نگه می‌دارند. مقدار با گونه‌ی نادرست باز هم خطاست.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: encoding-json-Marshal.salam