jsonai.fon.bg.ac.rs/wp-content/uploads/2020/04/json.pdf · 2020-04-11 · json objekat •...

21
JSON JavaScript Object Notation Nikola Milikić Milan Šuša Bojan Tomić

Upload: others

Post on 30-Jul-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: JSONai.fon.bg.ac.rs/wp-content/uploads/2020/04/JSON.pdf · 2020-04-11 · JSON objekat • Predstavlja neuređenu kolekciju parova naziv/vrednost • JSON objekat počinje sa otvorenom

JSONJavaScript Object Notation

Nikola Milikić

Milan Šuša

Bojan Tomić

Page 2: JSONai.fon.bg.ac.rs/wp-content/uploads/2020/04/JSON.pdf · 2020-04-11 · JSON objekat • Predstavlja neuređenu kolekciju parova naziv/vrednost • JSON objekat počinje sa otvorenom

JSON – JavaScript Object Notation

• Laki (lightweight) format za razmenu podataka

• Po mnogima je naslednik XML-a, ali to i nije sasvim tačno

• Jednostavan• Za ljude koji ga pišu

• Za mašine koje ga procesiraju

• JSON je tekstualni format

• Nezavisan od programskog jezika

Page 3: JSONai.fon.bg.ac.rs/wp-content/uploads/2020/04/JSON.pdf · 2020-04-11 · JSON objekat • Predstavlja neuređenu kolekciju parova naziv/vrednost • JSON objekat počinje sa otvorenom

Primer

{

"title" : "The Matrix",

"producer" : "Joel Silver",

"release_year" : 1999

}

Page 4: JSONai.fon.bg.ac.rs/wp-content/uploads/2020/04/JSON.pdf · 2020-04-11 · JSON objekat • Predstavlja neuređenu kolekciju parova naziv/vrednost • JSON objekat počinje sa otvorenom

JSON objekat

• Predstavlja neuređenu kolekciju parova naziv/vrednost

• JSON objekat počinje sa otvorenom zagradom ( { ), a završava sa zatvorenom zagradom ( } )

• Naziv i vrednost su razdvojeni dvotačkom ( : ), a parovi naziv/vrednost su razdvojeni zapetom ( , )

Page 5: JSONai.fon.bg.ac.rs/wp-content/uploads/2020/04/JSON.pdf · 2020-04-11 · JSON objekat • Predstavlja neuređenu kolekciju parova naziv/vrednost • JSON objekat počinje sa otvorenom

Primer JSON objekta

{

"title" : "The Matrix",

"producer" : "Joel Silver",

"release_year" : 1999

}

Page 6: JSONai.fon.bg.ac.rs/wp-content/uploads/2020/04/JSON.pdf · 2020-04-11 · JSON objekat • Predstavlja neuređenu kolekciju parova naziv/vrednost • JSON objekat počinje sa otvorenom

Tipovi podataka

• Number (npr. 1992 ili 7.2, pišu se bez znakova navoda)

• String (“John Doe”, dupli znaci navoda obavezno)

• Boolean (true ili false, pišu se bez znakova navoda)

• Objekat – neuređen asocijativni niz (ključ/vrednost)

• Niz – uređena sekvenca nula ili više vrednosti

• null - piše se bez znakova navoda

Preuzeto sa: https://www.w3schools.com/js/js_json_datatypes.asp

Page 7: JSONai.fon.bg.ac.rs/wp-content/uploads/2020/04/JSON.pdf · 2020-04-11 · JSON objekat • Predstavlja neuređenu kolekciju parova naziv/vrednost • JSON objekat počinje sa otvorenom

JSON niz

• JSON niz predstavlja uređenu sekvencu JSON objekata

• Počinje simbolom [ , a završava simbolom ]

• Objekti su razdvojeni zapetom

Page 8: JSONai.fon.bg.ac.rs/wp-content/uploads/2020/04/JSON.pdf · 2020-04-11 · JSON objekat • Predstavlja neuređenu kolekciju parova naziv/vrednost • JSON objekat počinje sa otvorenom

Primer JSON niza[ { "title” : "The Matrix", "producer" : "Joel Silver", "release_year" : 1999 }, { "title" : "Equilibrium", "producers" :[ { "name" : "Joel Silver" }, { "name" : "Lucas Foster" } ], "release_year" : 1999 }]

Page 9: JSONai.fon.bg.ac.rs/wp-content/uploads/2020/04/JSON.pdf · 2020-04-11 · JSON objekat • Predstavlja neuređenu kolekciju parova naziv/vrednost • JSON objekat počinje sa otvorenom

JSON vs XML(preuzeto sa: https://www.w3schools.com/js/js_json_xml.asp)

Sličnosti

● Oba formata su “samoopisna” (čitljiva)

● Oba su hijerarhijska (vrednosti unutar vrednosti)

● Oba mogu biti parsirana i korišćena u raznim programskim jezicima

● Oba mogu biti povratni rezultat XMLHttpRequest

Razlike

● JSON ne koristi krajnji tag

● JSON ima kraći zapis

● JSON se brže piše i čita (a i parsira)

● JSON ima i nizove

Page 10: JSONai.fon.bg.ac.rs/wp-content/uploads/2020/04/JSON.pdf · 2020-04-11 · JSON objekat • Predstavlja neuređenu kolekciju parova naziv/vrednost • JSON objekat počinje sa otvorenom

JSON vs XML - primer(preuzeto sa: https://www.w3schools.com/js/js_json_xml.asp)

Page 11: JSONai.fon.bg.ac.rs/wp-content/uploads/2020/04/JSON.pdf · 2020-04-11 · JSON objekat • Predstavlja neuređenu kolekciju parova naziv/vrednost • JSON objekat počinje sa otvorenom

JSON vs XML● Svaki ima svoje prednosti i mane (za više detalja, pročitati ovaj tekst:

https://hackr.io/blog/json-vs-xml)

● JSON je popularniji za razmenu podataka– Zbog jednostavnosti i kompatibilnosti sa JavaScript apl. okvirima

– Web servisi - popularnost REST API-ja u odnosu na SOAP/WSDL

– Kompleksni SAX/DOM parseri za XML

● Ali, XML je celokupan “markup” jezik koji sa XSD, XSLT, XPath i XQuery omogućava i:– Validaciju dokumenta

– Pretraživanje i upite

– Transformisanje u drugi XML dokument ili format

– Prikaz (formatiran kao HTML ili neki drugi oblik)

– Metapodatke, različito enkodiranje (ne samo UTF-8), namespaces...

Page 12: JSONai.fon.bg.ac.rs/wp-content/uploads/2020/04/JSON.pdf · 2020-04-11 · JSON objekat • Predstavlja neuređenu kolekciju parova naziv/vrednost • JSON objekat počinje sa otvorenom

Generisanje JSON-a i parsiranje• Biblioteke u Javi za manipulisanje JSON-om:• org.json

• Google Gson

• Jackson

Page 13: JSONai.fon.bg.ac.rs/wp-content/uploads/2020/04/JSON.pdf · 2020-04-11 · JSON objekat • Predstavlja neuređenu kolekciju parova naziv/vrednost • JSON objekat počinje sa otvorenom

Gson

• Java biblioteka kreirana od strane Google-a

• Služi za konverziju iz Java objekata u JSON i obratno

• Link: https://github.com/google/gson

Page 14: JSONai.fon.bg.ac.rs/wp-content/uploads/2020/04/JSON.pdf · 2020-04-11 · JSON objekat • Predstavlja neuređenu kolekciju parova naziv/vrednost • JSON objekat počinje sa otvorenom

Glavne funkcionalnosti Gson-a• Omogućava jednostavnu konverziju iz Java objekata

u JSON i obratno preko metoda toJson() i fromJson()

Page 15: JSONai.fon.bg.ac.rs/wp-content/uploads/2020/04/JSON.pdf · 2020-04-11 · JSON objekat • Predstavlja neuređenu kolekciju parova naziv/vrednost • JSON objekat počinje sa otvorenom

Imamo POJO klasu …

public class Employee {

String name;

String lastname;

(getter)

(setter)

}

Employee emp = new Employee();

emp.setName("John");

emp.setLastname("Smith")

{

"name" : "John", "lastname" : "Smith"

}

čiji objekat konvertujemo u JSON

Page 16: JSONai.fon.bg.ac.rs/wp-content/uploads/2020/04/JSON.pdf · 2020-04-11 · JSON objekat • Predstavlja neuređenu kolekciju parova naziv/vrednost • JSON objekat počinje sa otvorenom

Serijalizacija u JSON

Employee emp = new Employee();

emp.setName("John");

emp.setLastname("Smith")

Gson gson = new GsonBuilder().create();

FileWriter writer = new FileWriter("employee.json");

writer.write(gson.toJson(emp));

writer.close();

Page 17: JSONai.fon.bg.ac.rs/wp-content/uploads/2020/04/JSON.pdf · 2020-04-11 · JSON objekat • Predstavlja neuređenu kolekciju parova naziv/vrednost • JSON objekat počinje sa otvorenom

Deserijalizacija iz JSON fajlaFileReader reader = new FileReader("employee.json");

Gson gson = new GsonBuilder().create();

Employee emp = gson.fromJson(reader, Employee.class);

Page 18: JSONai.fon.bg.ac.rs/wp-content/uploads/2020/04/JSON.pdf · 2020-04-11 · JSON objekat • Predstavlja neuređenu kolekciju parova naziv/vrednost • JSON objekat počinje sa otvorenom

Ručno kreiranje JSON objektaJsonObject employeeJson = new JsonObject();

employeeJson.addProperty("firstName", "John");

employeeJson.addProperty("surname", "Smith");

{

"firstName" : "John", "surname" : "Smith"

}

Page 19: JSONai.fon.bg.ac.rs/wp-content/uploads/2020/04/JSON.pdf · 2020-04-11 · JSON objekat • Predstavlja neuređenu kolekciju parova naziv/vrednost • JSON objekat počinje sa otvorenom

JsonElement klasa

Page 20: JSONai.fon.bg.ac.rs/wp-content/uploads/2020/04/JSON.pdf · 2020-04-11 · JSON objekat • Predstavlja neuređenu kolekciju parova naziv/vrednost • JSON objekat počinje sa otvorenom

Izmena naziva JSON atributa i izuzimanje iz serijalizacije

public class Employee {

@SerializedName("firstName")

private String name;

private transient String lastname;

(getter)

(setter)

….

}

Page 21: JSONai.fon.bg.ac.rs/wp-content/uploads/2020/04/JSON.pdf · 2020-04-11 · JSON objekat • Predstavlja neuređenu kolekciju parova naziv/vrednost • JSON objekat počinje sa otvorenom

Učitavanje niza JSON objekataGson gson = new GsonBuilder().create();

Employee[] employees = gson.fromJson(json, Employee[].class);