nav_dugme codeBlog codeBlog
  • početna
  • Učionica
  • Saveti
  • Zanimljivosti
  • Kontakt

JSON - tekstualni format za predstavljanje objekata

Viber
zoom_plus zoom_minus

Uvod

Definisaćemo na početku problematiku slanja složenih podataka (celokupnog stanja objekata određenih klasa, nizova, lista i drugih složenih struktura) na daljinu:

  • Objekti u računarskim programima su (u kontekstu ovog članka), kolekcije podataka istog ili različitog tipa i njihov način zapisivanja je dobro utvrđen i opšte poznat (objekti, odnosno klase takođe sadrže i metode, funkcije čija je svrha manipulacija navedenim podacima (o svemu ovome možete se detaljnije obavestiti u članku o objektno orijentisanom programiranju), ali, to u kontekstu ovog članka nije od važnosti)
  • Prenos ovakvih podataka na daljinu, u izvornom (binarnom) obliku, jeste moguć, ali - nije praktičan. Zatvoreni binarni formati izazivaju (reklo bi se, sa punim pravom) strepnju kod administratora mrežnih sistema i ostavljaju mogućnost različitih vrsta zloupotrebe.

Format koji se tipično koristi za prenos složenih strukra podataka je, u osnovnom tehničkom smislu, isti format kojim se informacije i inače prenose od servera do klijenta, a to je - običan tekst, pa je, dakle, prvo pitanje: kako ćemo predstaviti objekte korišćenjem teksta, da bismo omogućili njihov prenos na daljinu?

Predstavljanje preko ključa i vrednosti

JSON (JavaScript Object Notation) je format za prenos i razmenu podataka u kome se podaci prestavljaju u tekstualnom obliku. Jednostavan je za pisanje, čitanje (bilo da taj posao obavlja čovek ili računar), razumevanje (doduše, našao bi se već neko od mlađih programera ko bi ovu poslednju tvrdnju doveo u pitanje:) ) i potpuno transparentan (otvoren, tekstualni format koji je sagledljiv u izvornom obliku).

Napomenimo da, iako JSON jeste iznikao iz JavaScript jezika, njegova primena odavno prevazilazi te prvobitne okvire i obuhvata podršku za brojne programske jezike (Python, Java, Android ....), kao i to da, iako se ovakav format tipično koristi za slanje podataka na daljinu, to ipak nije jedina oblast primene ovog formata.

JSON objekti se formatiraju na sledeći način:

  • Objekat čija svojstva želimo da definišemo, oivičićemo vitičastim zagradama
  • Svako svojstvo biće definisano preko ključa (leva strana koja imenuje svojstvo, u našem slučaju "ime") i vrednosti koja je zapisana sa desne strane, posle znaka ":"
  • Tekstualne vrednosti zapisuje se između znaka navoda, dok se brojčane navode bez znakova navoda - baš onako kako smo i inače navikli u programiranju
  • Postupak kojim se stanje određenog objekta (ili neka druga struktura podataka) prevodi u JSON objekat, naziva se serijalizacija (termin koji nas upućuje na to da je JSON objekat ipak ("samo") niz znakova)
  • Analogno tome, postupak kojim se od JSON strukture kreira objekat neke klase ili neka druga struktura podataka naziva se deserijalizacija.
									
{
	"ime" : "Vasilije"
}
									
								
Slika 1. - Jednostavan JSON objekat sa jednim ključ-vrednost parom kod koga je vrednost tekstualnog tipa.
									
{
	"visina" : 168
}
									
								
Slika 2. - Jednostavan JSON objekat sa jednim ključ-vrednost parom kod koga je vrednost brojčanog tipa.

Ukoliko objekat ima više svojstava, za razdvajanje se koristi znak zarez.

									
{
	"ime"     : "Ivana",
	"prezime" : "Stojanović",
	"email"   : "ivana_s_04@gmail.com",
	"godiste" : 2004
}
									
								
Slika 3. - JSON objekat koji sadrži više podataka o osobi. Različita svojsta su odvojena zarezima

Ukoliko je potrebno zapisati neko od svojstava (u našem primeru, to su omiljni_filmovi), kao niz podataka, koristićemo uglaste zagrade kakve i inače u programiranju koristimo za nizove.

									
{
	"ime"     : "Ivana",
	"prezime" : "Stojanović",
	"email"   : "ivana_s_04@gmail.com",
	"godiste" : 2004,
	"filmovi" : ["Munje",
	             "Lavirint",
	             "Sedam i po"]
}
									
								
Slika 4. - JSON objekat kod koga jedno od svojstava kao vrednost ima niz tekstualnih podataka.

Na kraju, šta ćemo uraditi ukoliko je neki od podataka koje želimo zapisati sam po sebi složen podatak? Poštovaćemo pravila koja smo već naveli: tretiraćemo dato svojstvo kao i svaki drugi ključ-vrednost par, tako da će ključ biti zapisan izmeću znakova navoda, ali će vrednost ovoga puta biti zapisana kao zaseban JSON objekat.

									
{
	"drzava" : "Srbija"
	"grad"   : "Beograd"
	"ulica"  : "Grofa Drakule"
	"broj"   : 41
}
									
								
Slika 5. - Zaseban JSON objekat koji sadrži detaljno zapisanu adresu.
									
{
	"ime"     : "Ivana",
	"prezime" : "Stojanović",
	"adresa"  : {
					"drzava" : "Srbija"
					"grad"   : "Beograd"
					"ulica"  : "Grofa Drakule"
					"broj"   : 41
				},
	"email"   : "ivana_s_04@gmail.com",
	"godiste" : 2004,
	"filmovi" : [
	                "Munje",
	                "Lavirint",
	                "Sedam i po"
	            ]
}
									
								
Slika 6. - Složeni JSON objekat čije jedno od svojstava kao vrednost ima JSON objekat.

U praksi ....

JSON kao format podataka za prenos i razmenu, ima dobru podršku u svim popularnim programskim jezicima. Za primer ćemo uzeti programski jezik Java i koristićemo popularnu biblioteku GSON.

Pre nego što se pozabavimo pretvaranjem Java objekta u JSON objekat, definisaćemo klasu koja odgovara našim zahtevima .....

									
public class Osoba {
	private String ime;
	private String prezime;
	private String email;
	private int    godina_rodjenja;
	
	public Osoba(String ime, String prezime, String email, int godina_rodjenja) {
		this.ime             = ime;
		this.prezime         = prezime;
		this.email           = email;
		this.godina_rodjenja = godina_rodjenja;
	}
}
									
								
Slika 7. - Java klasa koja sadrži polja koja odgovaraju JSON objektu sa početka teksta.

.... inicijlaizovati objekat ove klase ......

									
Osoba osoba = new Osoba("Ivana", "Stojanović", "ivana_s_04@gmail.com", 2004);
									
								
Slika 8. - Kreiranje objekta klase Osoba.

.... i na kraju kreirati GSON objekat koji će pretvoriti naš Java objekat u JSON objekat (postupkom serijalizacije koji smo pomenuli na početku članka):

									
Gson   gson = new Gson();
String json = gson.toJson(osoba);
									
								
Slika 9. - Gson objekat i pretvaranje Java objekta u JSON objekat.

Niska json sada ima isti sadržaj kao JSON objekat sa slike 3. iz ovog članka. Ono što je najzanimljivije u ovoj situaciji, je to da su ključevi automatksi dobijeni iz naziva polja klase.

Na jednostavan način (ukoliko je niska pravilno formatirana), od JSON objekta dobićemo Java objekat (pomenuti postupak deserijalizacije).

									
Osoba osoba2 = gson.fromJson(json, Osoba.class);
									
								
Slika10. - Pretvaranje JSON objekta (praktično - niske znakova) u Java objekat.

Učenicima koji su više zainteresovani za ovu oblast, ostavljamo da samostalno otkriju kako se rešava problem koji nastaje kada ključevi u JSON objektu ne odgovaraju poljima klase, kao i to da samostalno napišu klasu kao što je GSON, sa funkcijama za pretvaranje Java objekata u JSON objekte i obrnuto.

Autor članka Nikola Vukićević Za web portal www.codeblog.rs
Napomena: Tekstovi, slike, web aplikacije i svi ostali sadržaji na sajtu www.codeblog.rs (osim u slučajevima gde je drugačije navedeno) predstavljaju intelektualnu svojinu autora sajta www.codeblog.rs i zabranjeno je njihovo korišćenje na drugim sajtovima i štampanim medijima, kao i bilo kakvo drugo korišćenje u komercijalne svrhe, bez eksplicitnog pismenog odobrenja autora.
©2021. Sva prava zadržana.
Viber
početna Početna > Članci > JSON - tekstualni format za predstavljanje objekata

Info & povezani članci

Info

trejler_sat Datum objave: 22.07.2020.

trejler_dokument Jezici: Java

trejler_teg_narandzasti Težina: 6/10

Povezani članci

Rad sa tekstualnim datotekama u programskom jeziku C Regularni izrazi - napredna pretraga teksta Aritmetika velikih brojeva Kako napraviti web sajt - 1. deo - Početni koraci Napredna Google pretraga HTTP - Statusni kodovi IT termini Pokretanje lokalnog web servera Klase složenosti algoritama - (O notacija) Uvod u relacione baze podataka i SQL
Preuzmite PDF verziju
The only way to go fast, is to go well.
Robert C. Martin
codeBlog codeBlog
Projekat posvećen popularizaciji kulture i veštine programiranja među mladim programerima.
Napomena: Tekstovi i slike na sajtu www.codeblog.rs (osim u slučajevima, gde je drugačije navedeno) predstavljaju intelektualnu svojinu autora sajta www.codeblog.rs i zabranjeno je njihovo korišćenje na drugim sajtovima i štampanim medijima, kao i bilo kakvo drugo korišćenje u komercijalne svrhe, bez eksplicitnog odobrenja autora.
© 2021. Sva prava zadržana.
Facebook - logo
Instagram - logo
LinkedIn - logo
Twitter - logo
E-mail
Naslovna
   •
Uslovi korišćenja
   •
Obaveštenja
   •
FAQ
   •
Kontakt