Ako ti je JSON komplikovan ili necitljiv dobra alternativa je i
YAML. Ovaj recnik gore u YAML postaje:
Code:
dictionary:
- word: "play"
type: "noun"
translation:
- "igra"
- "predstava"
usage: "Primer fraze na engleskom jeziku i prevoda ..."
- word: "play"
type: "verb"
translation:
- "igrati (se)"
YAML je zgodan jer je manje-vise intuitivan, citiljiviji od JSON-a i ne zahteva jurnjavu za zagradama. Zapravo podseca na nacin na koji studenti hvataju beleske. Pravila su slicna pravilima sintakse Pythona - bitan je pravilan razmak reci od leve ivice, odnosno "nazubljivanje" (indenting). Liste se predstavljaju spiskom elemenata s vodecim crticama - npr:
Code:
lista:
- "prvi element"
- "drugi element"
- "treci element"
niz_brojeva:
- 1
- 153213
- 2190
sto je ekvivalentno Python kodu:
Code:
{ "lista": [ "prvi element", "drugi element", "treci element" ] }
{ "niz_brojeva": [ 1, 153213, 2190 ] }
Dictovi, odnosno hash tabele, se definisu kao spisak parova kljuc : "vrednost" npr:
Code:
person:
lastname: "Doe"
firstname: "John"
birthdate: "1960-12-01"
sto je ekvivalentno Python kodu:
Code:
{ "person" : { "lastname": "Doe", "firstname": "John", "birthdate": "1960-12-01" }}
Naravno, kombinacije su uvek moguce - npr:
Code:
person:
lastname: "Doe"
firstnames:
- "John"
- "Wilson"
sto daje:
Code:
{ "person": { "lastname": "Doe", "firstnames": [ "John", "Wilson" ] }}
U gornjem primeru sa recnikom promenljiva 'dictionary' je zapravo lista u kojoj su elementi dict-ovi
Mada su navodnici stvar konzistentnosti, YAML se lepo snalazi i konvertuje stringove bez obzira da li stavljas navodnike ili ne, jer je dizajniran u skladu sa
Postelovim principom. Drugim recima, recnik iz gornjeg primera Python ume savrseno da cita cak i ako napises:
Code:
dictionary:
- word: play
type: noun
translation:
- igra
- predstava
usage: Primer fraze na engleskom jeziku i prevoda ...
- word: play
type: verb
translation:
- igrati (se)
YAML parser je izuzetno inteligentan. Stavise, ako napises u fajlu:
Code:
vreme:
- datum: 2017-09-27
- vreme: 23:59:00
- temperatura: -5
YAML parser ce to lepo prepoznati i prilikom ucitavanja YAML fajla u promenljivu Python ce to lepo prepoznati i dace ti:
Code:
{'vreme': [{'datum': datetime.date(2017, 9, 27)}, {'vreme': 86340}, {'temperatura': -5}]}
Cak je prepoznao i da je 2017-09-27 datum, a vreme je izrazio u sekundama od ponoci (86340 = 23*3600 + 59*60). Takodje, temperaturu je prepoznao kao int.
Umalo da zaboravim finalnu sitnicu - kako se Python liste importuju iz YAML fajlova? Prosto, treba ti
PyYAML modul. Jednom kada ga instaliras i napravis fajl u YAML formatu (npr. yaml.txt) - samo kazes:
Code:
import yaml
d = yaml.load(open('yaml.txt', 'r'))
Naravno moguca je i obrnuta operacija - ako imas defiisanu promenljivu 'd' koja je neka kombinacija list/dict, mozes da je ispises u YAML formatu koriscenjem:
Code:
import yaml
yaml.dump(d)
I to je sve.
[Ovu poruku je menjao B3R1 dana 21.01.2020. u 11:18 GMT+1]