Ачааллж байна...
Өмнөх хичээлд бид JSON гэж юу болох, ямар харагдах, Python-ы төрлүүдтэй хэрхэн харгалзахыг ойлгосон. Одоо кодоо бичих цаг болжээ.
Python-д json гэсэн модуль байдаг. Тэр нь Python-той хамт ирдэг (standard library) тул pip install хийх шаардлагагүй — зөвхөн import json гэж бичихэд л хангалттай.
Тэр модульд ҮНДСЭН дөрвөн функц байна. Тэдгээр нь хоёр хосоор ажилладаг:
Бичих: json.dump() (файлд), json.dumps() (string болгоно)
Унших: json.load() (файлаас), json.loads() (string-ээс)
Ялгаа нь ганцхан үсэг: s. Тэр нь "string" гэсэн үг. s-тэй нь STRING-тэй ажиллана, s-гүй нь ФАЙЛТАЙ ажиллана.
Энэ хичээл дуусахад та Python-ы бүтцийг файлд хадгалж, буцааж уншиж чадна. Мөн Курс 1-ийн файл унших мэдлэг тань ЗЭРЭГ ТҮВШИН ДЭЭШИЛНЭ: тэнд та зөвхөн текст хадгалж байсан, одоо БҮТЭЦТЭЙ өгөгдөл хадгална.
Та найздаа тавилга илгээх гэж байна. Тавилга нь том, эвдэрч болзошгүй, шуудангаар шууд явуулж болохгүй.
Савлах: та түүнийг задалж, хавтгай хайрцагт хийж, лацдаж, шуудангаар илгээнэ. Одоо тэр нь "хайрцаг" болсон — шуудан түүнийг ойлгож, дамжуулж чадна.
Задлах: найз тань хайрцгийг хүлээж авч, нээж, зааврыг нь дагаж дахин угсарна. Одоо түүний гарт ЖИНХЭНЭ тавилга байна, хайрцаг биш.
json.dump() бол савлах. Таны Python-ы бүтцийг текст болгож хувиргана.
json.load() бол задлах. Текстээс Python-ы бүтцийг сэргээнэ.
Программын ертөнцөд эдгээр үйлдлийг serialize (савлах) ба deserialize (задлах) гэж нэрлэдэг. Эдгээр нэр томьёог та documentation-д харах болно, тиймээс мэдэж байгаарай — гэхдээ бид энэ курсэд ихэвчлэн "бичих" ба "унших" гэж энгийнээр ярина.
Шинэ хавтас үүсгэж (жишээ нь json-dasgal), PowerShell нээж, virtual environment үүсгээд идэвхжүүлнэ үү:
powershell
python -m venv venv
.\venv\Scripts\Activate.ps1(venv) гарч ирснийг баталгаажуулна уу. json модуль нь Python-той хамт ирдэг тул юу ч суулгах шаардлагагүй.
main.py нэртэй файл үүсгэнэ үү.
Хамгийн энгийн зүйлээс эхэлье: Python-ы dictionary-г JSON string болгож хувиргая.
python
# main.py
import json
suragch: dict[str, str | int] = {"ner": "Болд", "nas": 16, "angi": "10а"}
json_tekst: str = json.dumps(suragch)
print(json_tekst)
print(type(json_tekst))Ажиллуулна уу:
powershell
python main.py{"ner": "\u0411\u043e\u043b\u0434", "nas": 16, "angi": "10\u0430"}
<class 'str'>Хоёр зүйлийг анзаараарай.
Нэгдүгээрт, төрөл нь str болсон. Dictionary орж ирээд STRING гарлаа. Энэ бол dumps -ийн үүрэг: бүтцийг текст болгох.
Хоёрдугаарт, кирилл үсэг эвдэрсэн! Болд гэсэн үг \u0411\u043e\u043b\u0434 болж хувирсан.
Энэ бол алдаа биш. json.dumps нь анхдагчаар кирилл (болон бусад латин бус) үсгийг escape хийдэг — өөрөөр хэлбэл тусгай кодоор солино. Тэр код нь техникийн хувьд ЗӨВ бөгөөд буцааж уншихад кирилл болж сэргэнэ. Гэхдээ хүн уншихад аймшигтай.
Засвар нь keyword argument (Бүлэг 3.2-оос танил):
python
import json
suragch: dict[str, str | int] = {"ner": "Болд", "nas": 16, "angi": "10а"}
json_tekst: str = json.dumps(suragch, ensure_ascii=False)
print(json_tekst){"ner": "Болд", "nas": 16, "angi": "10а"}Одоо зөв.
ensure_ascii=False гэдэг нь "ASCII (латин үсэг) байх шаардлагагүй, кирилл үсгийг байгаагаар нь үлдээ" гэсэн заавар юм.
Энэ бол монгол хэлтэй ажиллах бүх Python программын ЗААВАЛ хэрэгтэй тохиргоо. Түүнийг мартвал таны бүх файл унших боломжгүй кодоор дүүрнэ. Тиймээс дүрэм болгож санаж яваарай:
json.dumpэсвэлjson.dumpsдуудах бүрдээensure_ascii=Falseбич.
Одоо илүү нарийн бүтэц авъя:
python
import json
suragchid: list[dict[str, str | int]] = [
{"ner": "Болд", "nas": 16, "angi": "10а"},
{"ner": "Сараа", "nas": 17, "angi": "10б"},
]
print(json.dumps(suragchid, ensure_ascii=False))[{"ner": "Болд", "nas": 16, "angi": "10а"}, {"ner": "Сараа", "nas": 17, "angi": "10б"}]Ажиллаж байна, гэхдээ бүх зүйл НЭГ мөрөнд. Богино өгөгдөл дээр асуудалгүй, гэхдээ жинхэнэ файлд зуун бичлэг байвал — уншиж болохгүй.
indent гэсэн keyword argument нь энэ асуудлыг шийднэ:
python
import json
suragchid: list[dict[str, str | int]] = [
{"ner": "Болд", "nas": 16, "angi": "10а"},
{"ner": "Сараа", "nas": 17, "angi": "10б"},
]
print(json.dumps(suragchid, ensure_ascii=False, indent=2))[
{
"ner": "Болд",
"nas": 16,
"angi": "10а"
},
{
"ner": "Сараа",
"nas": 17,
"angi": "10б"
}
]Одоо хүн уншиж чадна.
indent=2 гэдэг нь "давхарга бүрд хоёр зайгаар догол мөр өг" гэсэн заавар. indent=4 гэж бичвэл дөрвөн зай. Хоёр нь хамгийн түгээмэл сонголт.
Санаж байна уу, өмнөх хичээлд "JSON-д зай, шинэ мөр хамаагүй" гэж хэлсэн? Тэр л шалтгаанаар indent нь JSON-ы утгыг ЯМАР Ч БАЙДЛААР өөрчлөхгүй — зөвхөн хүнд харагдах байдлыг сайжруулна. Программ хоёуланг нь ижилхэн уншина.
Практик зөвлөгөө: файлд бичихдээ ҮРГЭЛЖ indent=2 ашигла. Файлын хэмжээ жаахан томрох ч, дараа нь та түүнийг нээж, өөрийн нүдээр шалгаж чадна. Тэр нь маш их цаг хэмнэдэг.
Одоо жинхэнэ ажил руу орно: өгөгдлийг ФАЙЛД хадгалъя.
python
import json
suragchid: list[dict[str, str | int]] = [
{"ner": "Болд", "nas": 16, "angi": "10а"},
{"ner": "Сараа", "nas": 17, "angi": "10б"},
]
with open("suragchid.json", "w", encoding="utf-8") as f:
json.dump(suragchid, f, ensure_ascii=False, indent=2)
print("Хадгаллаа.")Хадгаллаа.Одоо VS Code-оор suragchid.json файлыг нээж хараарай:
json
[
{
"ner": "Болд",
"nas": 16,
"angi": "10а"
},
{
"ner": "Сараа",
"nas": 17,
"angi": "10б"
}
]Файл үүслээ. Кодыг мөр мөрөөр нь задалъя.
with open("suragchid.json", "w", encoding="utf-8") as f:
Курс 1-ээс танил файл нээх бичлэг. "w" нь write буюу бичих горим — файл байхгүй бол үүсгэнэ, байвал агуулгыг нь БҮРЭН ДАРЖ БИЧНЭ (болгоомжтой!).
encoding="utf-8" нь дахин ЗААВАЛ хэрэгтэй. Түвшин 1-ийн guided build-аас санаж байгаа байх: Windows дээр энэ параметргүйгээр кирилл үсэг эвдэрдэг.
json.dump(suragchid, f, ensure_ascii=False, indent=2)
Хамгийн чухал мөр. Дөрвөн аргумент:
suragchid — юуг бичих вэ (Python-ы бүтэц)
f — ХААНА бичих вэ (нээлттэй файл)
ensure_ascii=False — кирилл үсгийг байгаагаар нь
indent=2 — хүн уншихад тааламжтай
dump ба dumps -ийн ялгааг дахин тодотгоё:
dumps(өгөгдөл) → string буцаана. Файл хэрэггүй. (s = string)
dump(өгөгдөл, файл) → юу ч буцаахгүй, ШУУД ФАЙЛД бичнэ. Хоёр дахь аргумент нь заавал нээлттэй файл.
Ихэнх тохиолдолд та dump ашиглана — учир нь өгөгдлийг хадгалах нь гол зорилго. dumps нь тусгай тохиолдолд хэрэгтэй (жишээ нь өгөгдлийг интернэтээр илгээх, эсвэл зүгээр л хэвлэж шалгах).
Одоо эсрэг чиглэл: файлаас уншиж, Python-ы бүтэц сэргээе.
python
import json
with open("suragchid.json", "r", encoding="utf-8") as f:
suragchid: list[dict[str, str | int]] = json.load(f)
print(suragchid)
print(type(suragchid))
print(suragchid[0]["ner"])[{'ner': 'Болд', 'nas': 16, 'angi': '10а'}, {'ner': 'Сараа', 'nas': 17, 'angi': '10б'}]
<class 'list'>
БолдБүх зүйл буцаж ирлээ. Файлаас уншсан өгөгдөл нь ЖИНХЭНЭ Python-ы list бөгөөд дотор нь жинхэнэ dictionary-ууд байна. Та түүн дээр Бүлэг 5-ын бүх мэдлэгээ шууд ашиглаж чадна.
"r" нь read буюу унших горим (Курс 1-ээс танил).
json.load(f) нь файлыг уншиж, JSON-ыг задалж, Python-ы бүтэц болгож буцаана.
Одоо бүрэн мөчлөгийг харъя — бичээд, уншаад, ашиглана:
python
import json
# 1. Өгөгдөл бэлдэх
suragchid: list[dict[str, str | int]] = [
{"ner": "Болд", "nas": 16, "angi": "10а"},
{"ner": "Сараа", "nas": 17, "angi": "10б"},
{"ner": "Төмөр", "nas": 16, "angi": "10а"},
]
# 2. Файлд бичих
with open("suragchid.json", "w", encoding="utf-8") as f:
json.dump(suragchid, f, ensure_ascii=False, indent=2)
# 3. Файлаас унших
with open("suragchid.json", "r", encoding="utf-8") as f:
unshsan: list[dict[str, str | int]] = json.load(f)
# 4. Ашиглах — Бүлэг 5-ын бүх мэдлэг ажиллана
angi_10a = [s for s in unshsan if s["angi"] == "10а"]
print(f"10а ангийн сурагчид: {[s['ner'] for s in angi_10a]}")
nasnaas = sorted(unshsan, key=lambda s: s["nas"], reverse=True)
print(f"Хамгийн ахмад: {nasnaas[0]['ner']}")
dundaj_nas = sum(s["nas"] for s in unshsan) / len(unshsan)
print(f"Дундаж нас: {dundaj_nas:.1f}")10а ангийн сурагчид: ['Болд', 'Төмөр']
Хамгийн ахмад: Сараа
Дундаж нас: 16.3Энэ бол бүрэн мөчлөг. Comprehension, sorted ба lambda, sum — бүгд файлаас уншсан өгөгдөл дээр ажиллаж байна. Ямар ч ялгаа алга.
{dundaj_nas:.1f} гэсэн бичлэг нь f-string-ийн формат заагч — "нэг оронтой бутархай хүртэл дугуйла" гэсэн үг. Курс 1-ээс танил.
loads нь load-тай ижил, гэхдээ файлаас биш, STRING-ээс уншина.
python
import json
json_tekst: str = '{"ner": "Болд", "nas": 16}'
suragch: dict[str, str | int] = json.loads(json_tekst)
print(suragch)
print(suragch["ner"]){'ner': 'Болд', 'nas': 16}
БолдХаана хэрэгтэй вэ? Бүлэг 11-д, интернэтээс өгөгдөл татахад.
Тэр үед API нь танд JSON-ыг STRING хэлбэрээр илгээнэ, файл биш. Тэгэхээр та loads ашиглана. (Үнэндээ requests сан нь .json() гэсэн method-оор түүнийг автоматаар хийж өгдөг — гэхдээ дотроо яг loads дууддаг.)
Анзаараарай, дээрх кодод би ганц хашилтаар Python-ы string бичсэн ('...'), учир нь дотор нь давхар хашилт байгаа (JSON-ы шаардлага). Хэрэв давхар хашилтаар эхэлбэл дотор нь давхар хашилт бичихэд асуудал үүснэ. Энэ бол практик зөвлөгөө: JSON string бичихдээ Python-д ганц хашилт ашигла.
Функц | Оролт | Гаралт | Хэзээ |
|---|---|---|---|
| Python бүтэц + файл | (юу ч биш) | Файлд хадгалах |
| Python бүтэц | string | Текст болгох (илгээх, хэвлэх) |
| файл | Python бүтэц | Файлаас унших |
| string | Python бүтэц | Текстээс унших (API хариу) |
Санах арга: s = string. s-тэй нь string-тэй ажиллана, s-гүй нь файлтай.
Одоо энэ хичээлийн хамгийн чухал алдаа руу орно. Та түүнийг заавал харна, тиймээс бэлдье.
Гар аргаар JSON файл үүсгээд, зориудаар алдаа гаргая. VS Code-оор evdersen.json нэртэй файл үүсгэж, дараах агуулгыг хийнэ үү:
{
"ner": "Болд",
"nas": 16,
}Анзаараарай: 16 -ийн ард таслал байна, дараа нь юу ч алга. Python-д энэ нь зөв. JSON-д БУРУУ.
Одоо уншиж үзье:
python
import json
with open("evdersen.json", "r", encoding="utf-8") as f:
suragch = json.load(f)
print(suragch)Traceback (most recent call last):
File "main.py", line 4, in <module>
suragch = json.load(f)
json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 4 column 1 (char 36)JSONDecodeError: Expecting property name enclosed in double quotes: line 4 column 1 гэдэг нь "давхар хашилтанд орсон key нэр хүлээж байсан: 4 дэх мөр, 1 дэх багана" гэсэн үг.
Мессежийг задалъя. Python нь таслалыг харсан → "аан, дараа нь өөр key ирнэ" гэж бодсон → гэвч буржгар хаалт хаагдсан → "key хаана байна?" гэж гомдож байна.
Хамгийн үнэ цэнэтэй хэсэг нь: line 4 column 1. Алдаа ЯГ ХААНА байгааг хэлж байна. Тэр файлын дөрөв дэх мөрийг хараарай — тэнд асуудал байна.
JSONDecodeError гарах гурван гол шалтгаан бий, бүгд өмнөх хичээлээс танил:
Шалтгаан 1: сүүлчийн таслал.
json
{"ner": "Болд", "nas": 16,}json.decoder.JSONDecodeError: Expecting property name enclosed in double quotesШалтгаан 2: ганц хашилт.
json
{'ner': 'Болд'}json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)Шалтгаан 3: Python-ы True/None.
json
{"idevkhtei": True, "duen": None}json.decoder.JSONDecodeError: Expecting value: line 1 column 16 (char 15)Expecting value гэдэг нь "энд утга байх ёстой байсан" гэсэн үг. JSON нь True гэдгийг таньдаггүй — түүнд зөвхөн true (жижиг үсэг) байдаг.
Дөрөв дэх шалтгаан: ХООСОН файл.
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)Файл огт хоосон бол JSON уншиж чадахгүй. Хоосон JSON файл нь ядаж {} эсвэл [] агуулах ёстой.
Бодит программ нь эдгээр алдаанаас хамгаалагдсан байх ёстой. Курс 1-ийн try/except -ийг ашиглая.
python
import json
def uguudul_unshikh(zam: str) -> list[dict[str, str | int]]:
try:
with open(zam, "r", encoding="utf-8") as f:
return json.load(f)
except FileNotFoundError:
print(f"Файл олдсонгүй: {zam}. Хоосон жагсаалтаас эхэлье.")
return []
except json.JSONDecodeError as alda:
print(f"Файл эвдэрсэн байна: {alda}")
return []
suragchid = uguudul_unshikh("baihgui.json")
print(suragchid)Файл олдсонгүй: baihgui.json. Хоосон жагсаалтаас эхэлье.
[]Программ унасангүй. Файл байхгүй бол хоосон жагсаалтаас эхэлж, ажлаа үргэлжлүүлнэ.
Хоёр except блок байгааг анзаараарай. Тэдгээр нь ХОЁР ӨӨР асуудлыг барьж байна:
FileNotFoundError — файл огт байхгүй. Энэ бол ХЭВИЙН зүйл (программ анх ажиллах үед файл үүсээгүй байх нь мэдээж). Хоосон жагсаалтаас эхэлнэ.
json.JSONDecodeError — файл байгаа, гэхдээ агуулга нь эвдэрсэн. Энэ бол АСУУДАЛ, гэхдээ программ унах ёсгүй.
as alda гэсэн бичлэг нь алдааны объектыг хувьсагчид хийж, дэлгэрэнгүй мессежийг харах боломж олгож байна. Курс 1-ээс танил.
Энэ хэв маягийг санаж яваарай. Дараагийн guided build (зарлагын бүртгэл) -д яг ийм функц бичнэ. Мөн Бүлэг 12-ийн цаг агаарын программд ижил зарчим ажиллана.
Одоо бодит программын хэв маягийг харъя — өгөгдөл файлд амьдарч, программ ажиллах бүрдээ түүнийг ачаалж, өөрчилж, буцааж хадгална.
python
import json
ZAM = "suragchid.json"
def achaalakh(zam: str) -> list[dict[str, str | int]]:
try:
with open(zam, "r", encoding="utf-8") as f:
return json.load(f)
except FileNotFoundError:
return []
except json.JSONDecodeError:
print("Файл эвдэрсэн байна. Хоосон жагсаалтаас эхэлье.")
return []
def khadgalakh(zam: str, uguudul: list[dict[str, str | int]]) -> None:
with open(zam, "w", encoding="utf-8") as f:
json.dump(uguudul, f, ensure_ascii=False, indent=2)
def nemekh(
suragchid: list[dict[str, str | int]], ner: str, nas: int, angi: str
) -> None:
suragchid.append({"ner": ner, "nas": nas, "angi": angi})
# Программ ажиллаж эхлэв
suragchid = achaalakh(ZAM)
print(f"Ачаалсан: {len(suragchid)} сурагч")
nemekh(suragchid, "Цэцэг", 16, "10в")
khadgalakh(ZAM, suragchid)
print(f"Хадгалсан: {len(suragchid)} сурагч")Эхний удаа ажиллуулахад (файл байхгүй үед):
Ачаалсан: 0 сурагч
Хадгалсан: 1 сурагчХоёр дахь удаа:
Ачаалсан: 1 сурагч
Хадгалсан: 2 сурагчГурав дахь удаа:
Ачаалсан: 2 сурагч
Хадгалсан: 3 сурагчӨгөгдөл нь программ хаагдсаны дараа ч ҮЛДЭЖ БАЙНА. Энэ бол жинхэнэ программын шинж. Курс 1-ийн хийх ажлын жагсаалт нь программ хаагдахад бүх зүйлээ мартдаг байсан — одоо тэр асуудал шийдэгдлээ.
ZAM = "suragchid.json" гэсэн мөрийг анзаараарай. Том үсгээр бичсэн нэр нь Python-д тогтмол (constant) гэсэн заншлын тэмдэг — "энэ утга өөрчлөгдөхгүй" гэсэн санаа. Python нь түүнийг албадан хамгаалахгүй (яг л type hint шиг), гэхдээ уншигчид тодорхой болгодог.
Хамгийн түгээмэл логик алдаа: өгөгдлийг өөрчлөөд, ХАДГАЛАХАА мартах.
python
suragchid = achaalakh(ZAM)
nemekh(suragchid, "Цэцэг", 16, "10в")
# khadgalakh(ZAM, suragchid) ← МАРТСАН!
print(f"Одоо {len(suragchid)} сурагч")Одоо 3 сурагчПрограмм зөв ажиллаж байгаа мэт харагдана. Гэвч дараагийн удаа ажиллуулахад Цэцэг АЛГА болно — учир нь тэр зөвхөн санах ойд байсан, файлд бичигдээгүй.
Санамж: өгөгдлийг өөрчлөх бүрдээ хадгал. Эсвэл ядаж программ дуусахаас өмнө нэг удаа хадгал.
Бүлэг 6-ийн guided build-д бид энэ дүрмийг хатуу баримтална: үйлдэл бүрийн дараа шууд хадгална.
Хэрэв сонирхвол: дээрх бүрэн мөчлөгийн программыг ажиллуулаад, suragchid.json файлыг VS Code-оор нээж хараарай. Дараа нь файлыг ГАРААР засаад (шинэ сурагч нэмээд), программаа дахин ажиллуулаарай. Таны гараар нэмсэн сурагч гарч ирэх ёстой.
Дараа нь зориудаар файлыг ЭВДЭЖ үзээрэй — сүүлчийн таслал нэмээрэй, эсвэл хашилтыг ганц болгож өөрчилөөрэй. Программ яаж хариу үйлдэл үзүүлэхийг хараарай. try/except нь ажиллаж байгаа эсэхийг өөрийн нүдээр харна.
Мөн хүсвэл: ensure_ascii=False -ийг АВЧ хаяад ажиллуулж, файлыг нээж хараарай. \u0411\u043e... гэсэн ойлгомжгүй код харагдана. Тэр туршилт нь тэр параметрийг хэзээ ч мартахгүй болгоно.
1. ensure_ascii=False мартах
json
{"ner": "\u0411\u043e\u043b\u0434"}Алдаа гарахгүй, файл ажиллана, буцааж уншихад кирилл болж сэргэнэ. Гэхдээ файл нь хүн уншихад ойлгомжгүй. Монгол хэлтэй ажиллах бүх программд ensure_ascii=False ЗААВАЛ.
2. encoding="utf-8" мартах
UnicodeDecodeError: 'charmap' codec can't decode byte 0x98 in position 12Windows дээр анхдагч кодчлол нь UTF-8 биш. Кирилл үсэгтэй файл нээх бүрдээ encoding="utf-8" бич — унших ба бичих ХОЁУЛАНД НЬ.
3. dump ба dumps -ыг андуурах
python
with open("f.json", "w", encoding="utf-8") as f:
json.dumps(suragchid, f)TypeError: dumps() takes 1 positional argument but 2 were givendumps нь ГАНЦ аргумент авдаг (өгөгдөл), файл авдаггүй. Файлд бичих гэж байвал dump (s-гүй) ашигла.
Эсрэг алдаа:
python
json_tekst = json.dump(suragchid)TypeError: dump() missing 1 required positional argument: 'fp'dump нь ХОЁР аргумент шаарддаг (өгөгдөл + файл). String хэрэгтэй бол dumps ашигла.
4. Set эсвэл tuple-key хадгалах
python
import json
uguudul = {"neres": {"Болд", "Сараа"}}
print(json.dumps(uguudul))TypeError: Object of type set is not JSON serializableObject of type set is not JSON serializable гэдэг нь "set-ийг JSON болгож хөрвүүлэх боломжгүй" гэсэн үг. Өмнөх хичээлээс санаж байгаа байх: JSON-д set байхгүй.
Засвар: эхлээд list болго.
python
uguudul = {"neres": list({"Болд", "Сараа"})}5. Файл байхгүй байхад унших
FileNotFoundError: [Errno 2] No such file or directory: 'suragchid.json'Программ анх ажиллах үед файл байхгүй байх нь ХЭВИЙН. try/except FileNotFoundError -ээр барьж, хоосон жагсаалтаас эхэл.
6. "w" горим өгөгдлийг устгах
python
with open("suragchid.json", "w", encoding="utf-8") as f:
json.dump([], f)"w" нь файлыг НЭЭХ мөчид л агуулгыг нь БҮРЭН УСТГАДАГ. Хэрэв та санамсаргүйгээр хоосон жагсаалт бичвэл — бүх өгөгдөл алга. Болгоомжтой байгаарай: эхлээд уншиж, дараа нь бичих гэсэн дарааллыг үргэлж баримтал.
7. Өөрчилсний дараа хадгалахаа мартах
Алдаа гарахгүй, гэхдээ өөрчлөлт файлд хүрэхгүй. Дараагийн удаа ажиллуулахад бүх зүйл алга болно.
import json — модуль нь Python-той хамт ирдэг, суулгах шаардлагагүй.
Дөрвөн функц. s = string:
json.dump(obj, f) — файлд бичнэ
json.dumps(obj) — string буцаана
json.load(f) — файлаас уншина
json.loads(s) — string-ээс уншина
ensure_ascii=False — кирилл үсгийг хамгаална. Монгол хэлтэй ажиллах бүх программд ЗААВАЛ.
indent=2 — файлыг хүн уншихад тааламжтай болгоно. JSON-ы утгыг өөрчлөхгүй.
encoding="utf-8" — файл нээх бүрд, унших ба бичих хоёуланд нь.
Стандарт бичлэг: json.dump(uguudul, f, ensure_ascii=False, indent=2).
JSONDecodeError — файл эвдэрсэн. Гурван гол шалтгаан: сүүлчийн таслал, ганц хашилт, True/None (JSON-д true/null байх ёстой). Алдааны мессеж нь line X column Y -ээр яг байрлалыг заана.
FileNotFoundError — файл байхгүй. Программ анх ажиллахад ХЭВИЙН. try/except -ээр барьж, хоосон жагсаалтаас эхэл.
TypeError: Object of type set is not JSON serializable — JSON-д set байхгүй. Эхлээд list болго.
Мөчлөг: ачаалах → өөрчлөх → ХАДГАЛАХ. Сүүлчийн алхмыг мартвал бүх өөрчлөлт алга болно.
Файлаас уншсан өгөгдөл нь ЖИНХЭНЭ Python-ы бүтэц. Бүлэг 5-ын бүх мэдлэг (comprehension, sorted, set) шууд ажиллана.
Дараагийн хичээлд бид CSV форматыг үзнэ. Тэр нь JSON-оос хамаагүй энгийн — зөвхөн мөр, багана, таслал. CSV нь Excel-ийн ертөнцтэй холбогддог: та Excel-ээс өгөгдөл гаргаж, Python-оор боловсруулж, буцааж Excel-д оруулж чадна. Мөн Монгол текстэй CSV файл дээр encoding -ийн асуудал дахин гарч ирнэ — тэр удаа арай нарийн хэлбэрээр.
Бүртгэлтэй болсноор энэ сургалтын бүх хичээлд хандах эрх авна.