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

جیسون encoding/json

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

واردسازی کدگذاری.جیسون
در این صفحه
  1. گونه‌ها
  2. روال‌ها

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

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

گونه‌ها

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

ساختار گزینه‌های جیسون
گزینه‌های کدگذاری.
نامانگلیسیگونهتوضیح
indentindentرشته = ""واحد تورفتگی؛ خالی یعنی یک خط.
sort_keyssort_keysمنطقی = نادرستکلیدها به ترتیب الفبا نوشته شوند. بدون آن، ترتیب کلیدها ثابت نیست.
ignore_nullignore_nullمنطقی = نادرستکلیدهای با مقدار تهی نوشته نشوند.
encoding-json-Value.salam
واردسازی کدگذاری.جیسون
واردسازی کدگذاری.مقدار
واردسازی کدگذاری.خطای کدگذاری
واردسازی سیستم پرونده.پرونده

روال ریشه:
    ناپایا خ := خطای کدگذاری.بدون خطا()
    م := جیسون.کدگشایی(`{"city": "تهران", "zones": [1, 2, 22]}`، خ)
    سرچاپ خطای کدگذاری.خطا است(خ)، مقدار.به رشته(مقدار.مقدار کلید(م، "city"))
    سرچاپ جیسون.کدگذاری پیش فرض(م)
    گ := جیسون.گزینه‌های جیسون { indent = "  "، sort_keys = درست }
    سرچاپ جیسون.کدگذاری(م، گ)
    _ := جیسون.کدگشایی("[1, 2"، خ)
    سرچاپ خطای کدگذاری.خطا است(خ)، خ.position
    ناپایا ک := جیسون.کدگذار حافظه()
    ک.کدگذاری(مقدار.مقدار صحیح(۱))
    ک.کدگذاری(مقدار.مقدار رشته("دو"))
    سرچاپ ک.متن()
    ک.بستن()
    ناپایا ت := جیسون.کدگذار حافظه با تورفتگی("  ")
    ت.کدگذاری(م)
    سرچاپ ت.متن()
    ت.بستن()
    ن := پرونده.بازکردن("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

ساختار کدگذار جیسون
نویسنده‌ی جریانی: چند مقدار جیسون را پشت‌سرهم، هر کدام در یک خط، می‌نویسد.
نامانگلیسیگونهتوضیح
dstdstپرونده*پرونده‌ی مقصد، اگر در پرونده می‌نویسد.
useFileuseFileمنطقی = نادرستآیا در پرونده می‌نویسد یا در حافظه.
bufbufرشته.StringBuilderحافظه‌ی متن، وقتی در حافظه می‌نویسد.
indentindentرشته = ""واحد تورفتگی؛ خالی یعنی هر مقدار در یک خط.
countcountصحیح = 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.
نامانگلیسیگونهتوضیح
srcsrcپرونده*پرونده‌ی منبع.
useFileuseFileمنطقی = نادرستآیا از پرونده می‌خواند.
bufbufرشته = ""متن خوانده‌شده.
posposصحیح = 0جای فعلی در متن.
loadedloadedمنطقی = نادرستآیا پرونده خوانده شده.
eofeofمنطقی = نادرستبه انتهای متن رسیده.
badbadمنطقی = نادرستخطایی در خواندن رخ داده.

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

باز هم More

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

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

کدگشایی Decode

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

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: 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]`، "--")
پایان
خروجی{"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 ]

دریافت 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

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

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

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

روال ریشه:
    ناپایا ک := کاربر { نام = "مریم"، سن = ۲۸، گذرواژه = "راز" }
    ک.برچسب‌ها.بیفزا("مدیر")
    سرچاپ جیسون.سریال سازی(ک)
    سرچاپ جیسون.سریال سازی با تورفتگی(ک، "  ")
    ناپایا خوانده := کاربر {}
    ناپایا خ := خطای کدگذاری.بدون خطا()
    سرچاپ جیسون.واسریال سازی(`{"name": "رضا", "age": 41, "tags": ["a", "b"]}`، خوانده، خ)
    سرچاپ خوانده.نام، خوانده.سن، خوانده.برچسب‌ها.طول()
    سرچاپ جیسون.واسریال سازی(`{"name": "رضا", "age": "چهل"}`، خوانده، خ)، خ.message
    ناپایا آسان := کاربر {}
    سرچاپ جیسون.واسریال سازی آسان گیر(`{"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

کدگشایی 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

کدگذار جدید 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

سریال سازی 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