Ачааллж байна...
Өмнөх бүлгийн төгсгөлд би нэг зүйлийг амласан: та үүрлэсэн бүтцийг сурснаар үнэндээ JSON-ыг уншиж сурсан гэж хэлсэн. Одоо тэр амлалтаа биелүүлэх цаг болжээ.
JSON гэдэг нь JavaScript Object Notation гэсэн үгсийн товчлол юм. Нэрэнд нь "JavaScript" гэж байгаа ч түүнд бүү төөрөгдөөрэй — JSON нь өнөөдөр JavaScript-тэй бараг ямар ч холбоогүй. Тэр нь бүх программчлалын хэлний НИЙТИЙН хөрөнгө болсон. Python, Java, C#, Go, Rust, PHP — бүгд JSON уншиж, бичиж чадна.
JSON бол формат юм. Тэр нь программчлалын хэл биш, сан биш, программ биш. Тэр бол зүгээр л өгөгдлийг текст болгож бичих тохиролцсон арга.
Энэ хичээл нь ойлголтын хичээл. Бид json модулийг ХАРАХГҮЙ — тэр нь дараагийн хичээлийн сэдэв. Энд бид зөвхөн: JSON гэж юу вэ, ямар харагддаг, яагаад оршин байдаг, Python-ы төрлүүдтэй хэрхэн харьцдаг — эдгээрийг ойлгоно. Дараагийн хичээлд кодоо бичихэд бүх зүйл ойлгомжтой байх болно.
Асуудлыг эхнээс нь ойлгоцгооё.
Танд Python программ байна. Түүнд сурагчдын мэдээлэл бий:
python
suragchid = [
{"ner": "Болд", "nas": 16, "angi": "10а"},
{"ner": "Сараа", "nas": 17, "angi": "10б"},
]Одоо та энэ өгөгдлийг ФАЙЛД ХАДГАЛАХ хүсэлтэй. Эсвэл ӨӨР ПРОГРАММД ИЛГЭЭХ хүсэлтэй — магадгүй интернэтээр, магадгүй тэр программ нь JavaScript-ээр бичигдсэн байх.
Энд асуудал үүснэ. Файлд зөвхөн ТЕКСТ бичиж болно. Файлд Python-ы dictionary "хийж" болохгүй — файл гэдэг нь зүгээр л тэмдэгтүүдийн урсгал юм. Ижил зүйл сүлжээнд ч хамаарна: интернэтээр зөвхөн байт, эцсийн эцэст текст л дамждаг.
Тэгэхээр асуулт: Python-ы бүтцийг ТЕКСТ болгож хэрхэн хөрвүүлэх вэ? Мөр тэр текстээс буцаж бүтэц болгож хэрхэн сэргээх вэ?
Мөн илүү хэцүү асуулт: тэр текстийг ӨӨР ХЭЛ дээр бичсэн программ ойлгох ёстой. Python-ы dictionary-г JavaScript мэдэхгүй. Тэгэхээр хоёулаа ойлгодог, ТӨВИЙГ САХИСАН формат хэрэгтэй.
JSON бол яг тэр формат юм.
Олон улсын хурал төсөөлье. Тэнд монгол, хятад, орос, англи хэлтэй хүмүүс байна. Хэн ч бусдын хэлийг мэдэхгүй.
Хоёр шийдэл бий.
Шийдэл 1: хос бүр өөрсдийн орчуулагчтай болно. Монгол-хятад орчуулагч, монгол-орос орчуулагч, хятад-орос орчуулагч... Хэл олшрох тусам орчуулагчийн тоо тэсрэлттэй өснө. Арван хэл байвал дөчин таван орчуулагч хэрэгтэй.
Шийдэл 2: бүгд НЭГ нийтлэг хэл (жишээ нь англи) дээр тохиролцоно. Хүн бүр өөрийн хэлээс англи руу, англиас өөрийн хэл рүү орчуулж чаддаг байхад л хангалттай. Арван хэл байвал арван орчуулагч. Мөн шинэ хэл нэмэгдэхэд ганц шинэ орчуулагч л хэрэгтэй.
JSON бол программуудын нийтлэг хэл. Python нь өөрийн бүтцийг JSON руу орчуулж чадна. JavaScript ч бас чадна. Java ч бас. Тиймээс Python программ JSON бичээд, JavaScript программ түүнийг уншиж чадна — хоёулаа "англи" мэддэг.
Тэр зүйрлэлд нэг чухал нарийвчлал байна. Нийтлэг хэл нь БҮХ ХЭЛНИЙ бүх нарийвчлалыг илэрхийлж чаддаггүй. Монгол хэлний зарим үгийг англиар яг таг илэрхийлж чадахгүй. Ижил зүйл JSON-д хамаарна: Python-ы БҮХ зүйлийг JSON-д хадгалж чадахгүй. Тэр нь зөвхөн НИЙТЛЭГ, энгийн зүйлсийг л дэмждэг. Тэр хязгаарлалтыг доор үзнэ.
Дээрх сурагчдын өгөгдлийг JSON болгож бичвэл:
json
[
{
"ner": "Болд",
"nas": 16,
"angi": "10а"
},
{
"ner": "Сараа",
"nas": 17,
"angi": "10б"
}
]Танил харагдаж байна уу?
Байх ёстой. Энэ нь Python-ы бүтэцтэй БАРАГ ЯГ ИЖИЛ харагдаж байна. Дөрвөлжин хаалт нь жагсаалт, буржгар хаалт нь key-value хосууд, цэгтэй таслал нь key-г value-аас тусгаарлаж байна.
Энэ ижил төстэй байдал нь ТОХИОЛДОЛ БИШ. JSON-ыг зохиох үед хамгийн энгийн, хамгийн түгээмэл өгөгдлийн бүтцүүдийг сонгосон бөгөөд ихэнх хэл тэдгээрийг ойролцоо байдлаар илэрхийлдэг.
Тиймээс та JSON-ыг уншиж ЧАДНА. Ямар ч шинэ зүйл сурах шаардлагагүй. Бүлэг 5-ын мэдлэг тань шууд ажиллана.
JSON-д ЗӨВХӨН зургаан төрөл байдаг. Цөөхөн — тэр нь зориудынх, учир нь энгийн байх тусам бүх хэл дэмжихэд хялбар болно.
1. String (текст) — давхар хашилтанд.
json
"Болд"
"Улаанбаатар"
""2. Number (тоо) — бүхэл эсвэл бутархай.
json
16
15000
-12.5
3.143. Boolean (үнэн/худал)
json
true
false4. null (юу ч биш)
json
null5. Array (жагсаалт) — дөрвөлжин хаалт.
json
["математик", "физик", "англи"]
[1, 2, 3]
[]6. Object (key-value хосууд) — буржгар хаалт.
json
{
"ner": "Болд",
"nas": 16
}Тэгээд л болоо. Өөр төрөл байхгүй. Огноо байхгүй, цаг байхгүй, олонлог байхгүй, tuple байхгүй, өнгө байхгүй, зураг байхгүй.
Гэхдээ эдгээр зургаан төрөл нь ҮҮРЛЭЖ чадна — object дотор array, array дотор object, дурын гүнд. Тэр л бүх хүчийг өгч байна.
Одоо хамгийн чухал хэсэг. Хоёр ертөнцийн харгалзаа:
JSON | Python |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Ихэнх нь шууд, ойлгомжтой. Гэхдээ ГУРВАН ялгааг сайн санаж яваарай, учир нь тэдгээр нь эхлэгчдийг байнга төөрөгдүүлдэг.
Ялгаа 1: true/false нь ЖИЖИГ үсэгтэй.
Python-д True, False — том үсгээр эхэлдэг. JSON-д true, false — БҮХЭЛДЭЭ жижиг.
Ялгаа 2: null нь None биш.
Python-д "юу ч биш" гэдэг нь None. JSON-д тэр нь null.
Ялгаа 3: JSON-д ЗӨВХӨН ДАВХАР хашилт.
Python-д та 'Болд' эсвэл "Болд" гэж бичиж болно — хоёулаа зөв. JSON-д зөвхөн "Болд". Ганц хашилт нь JSON-д БУРУУ бөгөөд алдаа гаргана.
Энэ гурван ялгаа нь дараагийн хичээлд JSONDecodeError гэсэн алдааны хамгийн түгээмэл шалтгаан болно.
Ижил өгөгдлийг хажуу хажуугаар нь харъя.
Python:
python
suragch = {
"ner": "Болд",
"nas": 16,
"idevkhtei": True,
"duen": None,
"khichelluud": ["математик", "физик"],
"medeelel": {"hot": "УБ", "utas": "99112233"},
}JSON:
json
{
"ner": "Болд",
"nas": 16,
"idevkhtei": true,
"duen": null,
"khichelluud": ["математик", "физик"],
"medeelel": {"hot": "УБ", "utas": "99112233"}
}Ялгаануудыг тодруулъя:
True → true (жижиг үсэг)
None → null
Python-д сүүлчийн элементийн ард таслал байж болно ("medeelel": {...},), JSON-д БОЛОХГҮЙ
Python-д ганц хашилт болно, JSON-д зөвхөн давхар
Бусад бүх зүйл ижилхэн.
Одоо чухал хязгаарлалтуудыг үзье. Python-ы зарим төрлийг JSON илэрхийлж ЧАДАХГҮЙ.
Tuple байхгүй.
python
tsegleg = (10, 20)JSON-д tuple гэж байхгүй. Хамгийн ойр зүйл нь array:
json
[10, 20]Тэгэхээр tuple нь JSON руу явахдаа array болж хувирна, буцаж ирэхдээ list болно. Tuple биш! Энэ бол мэдээлэл алдагдал юм — та tuple илгээгээд list хүлээж авна.
Set байхгүй.
python
uvurmuts = {"Болд", "Сараа"}JSON-д set гэж байхгүй. Түүнийг шууд хадгалж БОЛОХГҮЙ — алдаа гарна. Хэрэв хадгалах шаардлагатай бол эхлээд list болгож хувирга:
python
uvurmuts_list = list(uvurmuts)Гэхдээ дараа нь буцааж уншихад тэр нь list байх болно, set биш. Хэрэв set хэрэгтэй бол дахин хувирга: set(uvurmuts_list).
Огноо, цаг байхгүй.
Python-ы datetime объектыг JSON-д хадгалж болохгүй. Тэднийг ихэвчлэн string болгож хадгалдаг:
json
"2026-07-13"
"2026-07-13T14:30:00"Дараа нь уншихдаа буцааж datetime болгож задлана. Энэ бол маш түгээмэл хэв маяг.
Функц, class байхгүй.
Мэдээж — тэдгээрийг текст болгож хөрвүүлэх боломжгүй.
Dictionary-ийн key нь ЗӨВХӨН string.
Python-д dictionary-ийн key нь тоо, tuple байж болно (Бүлэг 5.1-ээс санаж байгаа байх):
python
zardal = {(2026, 1): 450000}
kart = {1: "Болд", 2: "Сараа"}JSON-д object-ийн key нь ЗӨВХӨН string байх ЁСТОЙ. Тэгэхээр тоон key нь string болж хувирна:
json
{"1": "Болд", "2": "Сараа"}Анзаараарай: 1 (тоо) нь "1" (string) болсон. Буцааж уншихад тэр нь string хэвээрээ! Хэрэв танд тоо хэрэгтэй бол өөрөө хувиргах хэрэгтэй болно.
Tuple-key бол бүр ч муу — түүнийг JSON-д хадгалж ОГТ болохгүй, алдаа гарна.
Дүгнэлт: JSON нь зөвхөн энгийн, нийтлэг зүйлсийг л дэмждэг. Тэр нь Python-ы БҮХ баялгийг илэрхийлж чадахгүй. Энэ нь сул тал биш — тэр л бүх хэл түүнийг ойлгож чаддагийн үнэ юм.
Түүхэн тэмдэглэл, учир нь тэр нь ойлголтыг гүнзгийрүүлдэг.
JSON-оос өмнө XML гэдэг формат давамгайлж байсан. Тэр нь ойролцоогоор ийм харагддаг:
xml
<suragch>
<ner>Болд</ner>
<nas>16</nas>
</suragch>XML нь маш хүчирхэг, маш уян хатан байсан. Гэвч тэр нь мөн үг ихтэй — <ner> ба </ner> гэж хоёр удаа бичих хэрэгтэй. Мөн уншиж боловсруулах нь төвөгтэй байсан.
JSON нь 2000-аад оны эхээр гарч ирээд, хоёр давуу талаараа ялсан:
1. Хүн уншихад амархан. Дээрх JSON жишээг харахад та ямар ч заавар үзэлгүйгээр ойлгож байсан. XML-д тийм биш.
2. Программ боловсруулахад амархан. JSON-ы бүтэц нь ихэнх хэлний өгөгдлийн бүтэцтэй бараг шууд харгалзана.
Өнөөдөр интернэтийн API-уудын дийлэнх нь JSON ашигладаг. Та Бүлэг 11-д цаг агаарын API-аас өгөгдөл татахад — тэр нь JSON байх болно. Facebook, Google, Twitter, ямар ч орчин үеийн үйлчилгээ — бүгд JSON.
Мөн FastAPI (Бүлэг 15) — таны бичих API нь юу буцаах вэ? JSON. Автоматаар, та юу ч хийхгүйгээр. Тэр нь таны Python-ы dictionary-г JSON болгож хөрвүүлээд илгээнэ.
Тэгэхээр энэ хичээл бол зөвхөн файл хадгалахын тухай биш. Энэ бол интернэтийн өгөгдлийн хэлийг ойлгох тухай юм.
Бүлэг 11-д та жинхэнэ цаг агаарын API-аас өгөгдөл татна. Тэр өгөгдөл ойролцоогоор ийм харагдана:
json
{
"latitude": 47.9167,
"longitude": 106.9167,
"timezone": "Asia/Ulaanbaatar",
"current": {
"time": "2026-07-13T14:00",
"temperature_2m": 24.3,
"wind_speed_10m": 12.5,
"is_day": 1
},
"daily": {
"time": ["2026-07-13", "2026-07-14", "2026-07-15"],
"temperature_2m_max": [26.1, 24.8, 22.0],
"temperature_2m_min": [12.4, 11.9, 10.2]
}
}Энэ бол жинхэнэ, бодит API-гийн хариултын хэлбэр. Одоо түүнийг задалъя.
Хамгийн гадна талд object (буржгар хаалт) байна. Дотор нь таван key: latitude, longitude, timezone, current, daily.
latitude ба longitude нь тоо. timezone нь string.
current нь ӨӨР object — дотор нь одоогийн цаг агаарын мэдээлэл.
daily нь бас object, гэхдээ түүний value-ууд нь array — өдөр бүрийн утгууд.
Python-д уншсаны дараа та ингэж хандана:
python
print(hariult["timezone"])
print(hariult["current"]["temperature_2m"])
print(hariult["daily"]["temperature_2m_max"][0])Asia/Ulaanbaatar
24.3
26.1Та энэ кодыг ОДООХОНДОО бичиж чадна. Бүлэг 5.3-ын үүрлэсэн бүтцийн мэдлэг л хэрэгтэй. Тэр л энэ бүх бэлтгэлийн зорилго байсан.
Сүүлчийн мөр нь ялангуяа сонирхолтой: ["daily"]["temperature_2m_max"][0] — object → object → array → эхний элемент. Гурван давхарга. Бүлэг 5-д бид яг үүнийг дасгал болгож хийсэн.
JSON файл нь .json өргөтгөлтэй, зүгээр л текст файл байдаг. Түүнийг ямар ч текст засварлагчаар нээж болно.
suragchid.json:
json
[
{
"ner": "Болд",
"nas": 16,
"angi": "10а",
"khichelluud": ["математик", "физик"]
},
{
"ner": "Сараа",
"nas": 17,
"angi": "10б",
"khichelluud": ["хими", "англи"]
}
]Хэдэн зүйлийг анзаараарай:
Догол мөр нь ЗААВАЛ БИШ. JSON-д зай, шинэ мөр хамаагүй. Дээрх файлыг нэг урт мөрөнд бичсэн ч ажиллана:
json
[{"ner":"Болд","nas":16},{"ner":"Сараа","nas":17}]Гэхдээ хүн уншихад аймшигтай. Тиймээс ихэвчлэн догол мөртэй бичдэг — дараагийн хичээлд indent=2 гэсэн keyword argument-аар үүнийг хийнэ.
Сүүлчийн элементийн ард таслал БАЙХГҮЙ. Python-д [1, 2, 3,] гэж бичиж болно. JSON-д БОЛОХГҮЙ — тэр нь алдаа. Энэ бол JSONDecodeError-ийн хамгийн түгээмэл шалтгаануудын нэг.
Тайлбар (comment) БАЙХГҮЙ. Python-д # тайлбар гэж бичиж болно. JSON-д тайлбар ОГТ байхгүй. Хэрэв та JSON файлд // эсвэл # бичвэл — алдаа.
Энэ хязгаарлалт нь ядаргаатай санагддаг ч зориудынх: JSON бол ӨГӨГДӨЛ, программ биш. Тайлбар нь программын зүйл юм.
Хэрэв сонирхвол: VS Code нээгээд test.json нэртэй файл үүсгэж, дараах агуулгыг хийгээрэй.
json
{
"ner": "Болд",
"nas": 16,
"idevkhtei": true,
"duen": null,
"khichelluud": ["математик", "физик"]
}VS Code нь .json файлыг ТАНИДАГ бөгөөд өнгөөр ялгаж харуулна. Одоо зориудаар алдаа гаргаж үзээрэй:
true -г True болгож өөрчил → VS Code улаанаар зурна
Ганц хашилт ашигла: 'ner' → улаан
Сүүлчийн элементийн ард таслал нэм → улаан
Тэдгээр алдаа бүрийг өөрийн нүдээр харах нь дараагийн хичээлд JSONDecodeError гарахад таныг бэлтгэнэ.
Мөн хүсвэл: интернэт хайлтаар "JSON validator" гэж хайж, ямар нэг онлайн шалгагч олоод, өөрийн JSON-ыг наагаад шалгуулж үзээрэй. Тэдгээр хэрэгсэл нь алдааг яг хаана байгааг заадаг.
1. JSON бол Python-ы код гэж бодох
JSON бол өгөгдлийн формат, программчлалын хэл БИШ. Түүнд функц, тооцоолол, if, loop байхгүй. Зөвхөн өгөгдөл.
2. True/False бичих
Python: True. JSON: true. Жижиг үсэг.
3. None бичих
Python: None. JSON: null.
4. Ганц хашилт ашиглах
Python: 'Болд' эсвэл "Болд" — хоёулаа зөв.
JSON: зөвхөн "Болд".
5. Сүүлчийн таслал үлдээх
Python: [1, 2, 3,] — зөв.
JSON: [1, 2, 3,] — АЛДАА.
6. Tuple эсвэл set хадгалах гэж оролдох
JSON-д тэдгээр байхгүй. Tuple → array болж хувирна (буцаж ирэхдээ list). Set → шууд хадгалж болохгүй, эхлээд list болго.
7. Тоон key ашиглах
Python: {1: "Болд"} — зөв.
JSON: key нь заавал string. Тоо нь "1" болж хувирна, буцаж ирэхдээ string хэвээрээ.
JSON (JavaScript Object Notation) нь өгөгдлийг ТЕКСТ болгож бичих тохиролцсон формат. Программчлалын хэл БИШ.
Тэр нь программуудын нийтлэг хэл — Python, JavaScript, Java, бүх хэл түүнийг уншиж, бичиж чадна.
Файл болон интернэт нь зөвхөн ТЕКСТ дамжуулдаг тул бүтцийг текст болгож хөрвүүлэх формат зайлшгүй хэрэгтэй.
Зургаан төрөл: string, number, true/false, null, array, object. Тэдгээр нь дурын гүнд үүрлэж чадна.
Python ↔ JSON: str↔string, int/float↔number, True↔true, False↔false, None↔null, list↔array, dict↔object.
Гурван гол ялгаа: true/false нь жижиг үсэгтэй; null нь None биш; зөвхөн ДАВХАР хашилт.
JSON-д БАЙХГҮЙ: tuple (array болно), set (шууд хадгалж болохгүй), огноо (string болгоно), функц, class. Object-ийн key нь зөвхөн string.
Сүүлчийн таслал БОЛОХГҮЙ. Тайлбар (comment) БАЙХГҮЙ.
JSON-ы бүтэц нь Бүлэг 5-ын үүрлэсэн бүтэцтэй ЯГ ИЖИЛ. Та түүнийг УНШИЖ АЛЬ ХЭДИЙН чадна.
Интернэтийн API-уудын дийлэнх нь JSON ашигладаг. FastAPI (Бүлэг 15) ч бас JSON буцаана.
Дараагийн хичээлд бид json модуль -ийг үзнэ. Тэр нь Python-ы бүтцийг JSON текст болгож хөрвүүлэх (dump, dumps) ба JSON текстээс Python-ы бүтэц сэргээх (load, loads) дөрвөн функцтэй. Мөн indent= -ээр файлыг хүн уншихад тааламжтай болгох арга, болон JSONDecodeError гэсэн алдааг задлан тайлбарлана — тэр алдааны шалтгаанууд нь энэ хичээлд жагсаасан гурван ялгаа байх болно.
Бүртгэлтэй болсноор энэ сургалтын бүх хичээлд хандах эрх авна.