Sobes.tech
Junior

Šta je serializacija?

sobes.tech АИ

Одговор од АИ

Serijalizacija je proces pretvaranja strukture podataka ili objekta u format koji se može sačuvati, preneti putem mreže ili kasnije obnoviti. Obrnuti proces se naziva deserializacija.

Glavni ciljevi serijalizacije:

  • Čuvanje stanja: Omogućava sačuvavanje stanja objekta ili strukture podataka za kasnije obnavljanje.
  • Prenos podataka: Obezbeđuje standardizovani format za razmenu podataka između različitih sistema ili procesa.
  • Keširanje: Serijalizovani podaci su pogodni za privremeno skladištenje u kešu.

U Pythonu se često koriste sledeći moduli i formati za serijalizaciju:

  • pickle: Standardni modul za serijalizaciju i deserializaciju Python objekata. Pogodan za čuvanje i učitavanje podataka unutar Python aplikacija. Ne preporučuje se za razmenu podataka sa aplikacijama na drugim jezicima zbog specifičnosti formata.

    # Čuvanje objekta
    import pickle
    
    data = {'a': 1, 'b': [2, 3]}
    with open('data.pkl', 'wb') as f:
        pickle.dump(data, f)
    
    # Učitavanje objekta
    with open('data.pkl', 'rb') as f:
        loaded_data = pickle.load(f)
    
  • json: Standardni modul za rad sa JSON (JavaScript Object Notation). Široko se koristi za web API i razmenu podataka između različitih sistema. JSON je tekstualni i lako čitljiv format. Podržava ograničen skup tipova podataka (nizovi, brojevi, boolean, liste, rečnici, null).

    # Serijalizacija u JSON
    import json
    
    data = {'name': 'Alice', 'age': 30}
    json_string = json.dumps(data)
    print(json_string)
    
    # Deserijalizacija iz JSON
    loaded_data = json.loads(json_string)
    print(loaded_data)
    
  • yaml: Modul za rad sa YAML (Yet Another Markup Language). Odlikuje se čitljivijim sintaksom u poređenju sa JSON-om. Često se koristi za konfiguracione fajlove.

    # Serijalizacija u YAML (potrebno je instalirati PyYAML)
    # import yaml
    #
    # data = {"list": [1, 2, 3], "dict": {"key": "value"}}
    # yaml_string = yaml.dump(data)
    # print(yaml_string)
    #
    # # Deserijalizacija iz YAML
    # loaded_data = yaml.load(yaml_string, Loader=yaml.FullLoader)
    # print(loaded_data)
    
  • protobuf (Protocol Buffers): Format za serijalizaciju koji je razvio Google. Binarni, efikasan i podržava šeme podataka (korišćenjem fajlova .proto). Često se koristi u sistemima visokih performansi i RPC (Remote Procedure Call).

Izbor formata za serijalizaciju zavisi od konkretne zadatka, zahteva za performansama, čitljivosti i potrebe za interakcijom sa drugim jezicima za programiranje.