YAML Parser

YAML Parser

YAML tahlilchisi

YAML — konfiguratsiya fayllarida keng qo'llaniladigan, odam o'qishi oson bo'lgan ma'lumot formati (Docker Compose, Kubernetes, CI/CD Pipeline'lari uning ustida quriladi). Eng sodda shaklida, bitta YAML hujjati shunchaki kalit: qiymat qatorlaridan iborat:

example.yaml
name: laptop
price: 999.99
category: electronics

Bitta faylda bir nechta hujjat bo'lishi mumkin — bular faqat --- (uchta chiziqcha) yozilgan qatori bilan bir-biridan ajratiladi. Bu ko'p hujjatli YAML (multi-document YAML) deb ataladi, va odatda bitta faylda bir nechta yozuvni (masalan, mahsulotlar to'plamini) tasvirlash uchun ishlatiladi:

example.yaml
name: laptop
price: 999.99
category: electronics
---
name: mouse
price: 19.99
category: electronics

Bu kursda siz shu formatni Go orqali tahlil qiladigan (parse) kichik Pipeline qurasiz. Haqiqiy loyihalarda buning uchun tashqi kutubxona (masalan gopkg.in/yaml.v3) ishlatiladi, lekin bu darslar muhitida faqat standart kutubxona mavjud. Yaxshiyamki, buning hech qanday zarari yo'q — YAML'ning shu tekis (flat), ichma-ich tuzilmasiz shaklini siz allaqachon bilgan vositalar bilan, qo'lda tahlil qilish mumkin: strings.Split va Composite Types kursidagi map andazalari.

Bitta hujjatni tahlil qilish

Hujjatni qatorlarga bo'ling, har birini tozalang, va har bir qatorni birinchi : bo'yicha ikkiga ajrating — chap tomoni kalit, o'ng tomoni qiymat:

example.go
for _, line := range strings.Split(doc, "\n") {
	line = strings.TrimSpace(line)
	if line == "" {
		continue // bo'sh qatorlarni o'tkazib yuboring
	}
	parts := strings.SplitN(line, ":", 2)
	key := strings.TrimSpace(parts[0])
	value := strings.TrimSpace(parts[1])
	// ...natijaga saqlang
}

strings.SplitN(s, sep, 2)strings.Splitning cheklangan varianti: u ko'pi bilan 2 ta bo'lakka ajratadi. Bu muhim, chunki qiymatning o'zida ham : bo'lishi mumkin (masalan, vaqt 12:30 kabi) — cheksiz Split bunday qiymatni buzib qo'yardi.

Ko'p hujjatni tahlil qilish

Butun kirishni "---" bo'yicha bo'lib, har bir bo'lakni alohida hujjat sifatida tahlil qilasiz. Ajratuvchi atrofidagi bo'sh qatorlar tashvishlanishga arzimaydi — ular allaqachon yozib bo'lgan ParseDocumentingiz tomonidan o'tkazib yuboriladi.

>_ Exercise

Bitta tekis YAML hujjatini kalit: qiymat juftliklari mapiga aylantiradigan ParseDocument(doc string) map[string]string funksiyasini yozing.

Butun ko'p hujjatli kirishni "---" bo'yicha bo'lib, har birini ParseDocument bilan tahlil qilib, natijalar slicasini qaytaradigan ParseYAML(input string) []map[string]string funksiyasini yozing.

Misol:

  • ParseYAML("name: laptop\nprice: 999.99\n---\nname: mouse\nprice: 19.99") ikkita mapdan iborat slice qaytaradi: birinchisida {"name": "laptop", "price": "999.99"}, ikkinchisida {"name": "mouse", "price": "19.99"}

Stuck? Reveal a hint to help you.

Hints (0/4)

Key Takeaway

Key Takeaway:

Tashqi kutubxonasiz oddiy matn formatini tahlil qilish uchun strings.Split va strings.SplitN yetarli bo'lishi mumkin. SplitNdan foydalaning, agar qiymatning o'zida ajratuvchi belgi uchrashi mumkin bo'lsa.

NEXT UP

Data Transformer

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

YAML Parser

YAML tahlilchisi

YAML — konfiguratsiya fayllarida keng qo'llaniladigan, odam o'qishi oson bo'lgan ma'lumot formati (Docker Compose, Kubernetes, CI/CD Pipeline'lari uning ustida quriladi). Eng sodda shaklida, bitta YAML hujjati shunchaki kalit: qiymat qatorlaridan iborat:

example.yaml
name: laptop
price: 999.99
category: electronics

Bitta faylda bir nechta hujjat bo'lishi mumkin — bular faqat --- (uchta chiziqcha) yozilgan qatori bilan bir-biridan ajratiladi. Bu ko'p hujjatli YAML (multi-document YAML) deb ataladi, va odatda bitta faylda bir nechta yozuvni (masalan, mahsulotlar to'plamini) tasvirlash uchun ishlatiladi:

example.yaml
name: laptop
price: 999.99
category: electronics
---
name: mouse
price: 19.99
category: electronics

Bu kursda siz shu formatni Go orqali tahlil qiladigan (parse) kichik Pipeline qurasiz. Haqiqiy loyihalarda buning uchun tashqi kutubxona (masalan gopkg.in/yaml.v3) ishlatiladi, lekin bu darslar muhitida faqat standart kutubxona mavjud. Yaxshiyamki, buning hech qanday zarari yo'q — YAML'ning shu tekis (flat), ichma-ich tuzilmasiz shaklini siz allaqachon bilgan vositalar bilan, qo'lda tahlil qilish mumkin: strings.Split va Composite Types kursidagi map andazalari.

Bitta hujjatni tahlil qilish

Hujjatni qatorlarga bo'ling, har birini tozalang, va har bir qatorni birinchi : bo'yicha ikkiga ajrating — chap tomoni kalit, o'ng tomoni qiymat:

example.go
for _, line := range strings.Split(doc, "\n") {
	line = strings.TrimSpace(line)
	if line == "" {
		continue // bo'sh qatorlarni o'tkazib yuboring
	}
	parts := strings.SplitN(line, ":", 2)
	key := strings.TrimSpace(parts[0])
	value := strings.TrimSpace(parts[1])
	// ...natijaga saqlang
}

strings.SplitN(s, sep, 2)strings.Splitning cheklangan varianti: u ko'pi bilan 2 ta bo'lakka ajratadi. Bu muhim, chunki qiymatning o'zida ham : bo'lishi mumkin (masalan, vaqt 12:30 kabi) — cheksiz Split bunday qiymatni buzib qo'yardi.

Ko'p hujjatni tahlil qilish

Butun kirishni "---" bo'yicha bo'lib, har bir bo'lakni alohida hujjat sifatida tahlil qilasiz. Ajratuvchi atrofidagi bo'sh qatorlar tashvishlanishga arzimaydi — ular allaqachon yozib bo'lgan ParseDocumentingiz tomonidan o'tkazib yuboriladi.

>_ Exercise

Bitta tekis YAML hujjatini kalit: qiymat juftliklari mapiga aylantiradigan ParseDocument(doc string) map[string]string funksiyasini yozing.

Butun ko'p hujjatli kirishni "---" bo'yicha bo'lib, har birini ParseDocument bilan tahlil qilib, natijalar slicasini qaytaradigan ParseYAML(input string) []map[string]string funksiyasini yozing.

Misol:

  • ParseYAML("name: laptop\nprice: 999.99\n---\nname: mouse\nprice: 19.99") ikkita mapdan iborat slice qaytaradi: birinchisida {"name": "laptop", "price": "999.99"}, ikkinchisida {"name": "mouse", "price": "19.99"}

Stuck? Reveal a hint to help you.

Hints (0/4)

Key Takeaway

Key Takeaway:

Tashqi kutubxonasiz oddiy matn formatini tahlil qilish uchun strings.Split va strings.SplitN yetarli bo'lishi mumkin. SplitNdan foydalaning, agar qiymatning o'zida ajratuvchi belgi uchrashi mumkin bo'lsa.

NEXT UP

Data Transformer