JSONai.fon.bg.ac.rs/wp-content/uploads/2020/04/JSON.pdf · 2020-04-11 · JSON objekat •...
Transcript of JSONai.fon.bg.ac.rs/wp-content/uploads/2020/04/JSON.pdf · 2020-04-11 · JSON objekat •...
![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](https://reader034.fdocument.pub/reader034/viewer/2022050402/5f7fd39359f5d82f173c09c6/html5/thumbnails/1.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022050402/5f7fd39359f5d82f173c09c6/html5/thumbnails/2.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022050402/5f7fd39359f5d82f173c09c6/html5/thumbnails/3.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022050402/5f7fd39359f5d82f173c09c6/html5/thumbnails/4.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022050402/5f7fd39359f5d82f173c09c6/html5/thumbnails/5.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022050402/5f7fd39359f5d82f173c09c6/html5/thumbnails/6.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022050402/5f7fd39359f5d82f173c09c6/html5/thumbnails/7.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022050402/5f7fd39359f5d82f173c09c6/html5/thumbnails/8.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022050402/5f7fd39359f5d82f173c09c6/html5/thumbnails/9.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022050402/5f7fd39359f5d82f173c09c6/html5/thumbnails/10.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022050402/5f7fd39359f5d82f173c09c6/html5/thumbnails/11.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022050402/5f7fd39359f5d82f173c09c6/html5/thumbnails/12.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022050402/5f7fd39359f5d82f173c09c6/html5/thumbnails/13.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022050402/5f7fd39359f5d82f173c09c6/html5/thumbnails/14.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022050402/5f7fd39359f5d82f173c09c6/html5/thumbnails/15.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022050402/5f7fd39359f5d82f173c09c6/html5/thumbnails/16.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022050402/5f7fd39359f5d82f173c09c6/html5/thumbnails/17.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022050402/5f7fd39359f5d82f173c09c6/html5/thumbnails/18.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022050402/5f7fd39359f5d82f173c09c6/html5/thumbnails/19.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022050402/5f7fd39359f5d82f173c09c6/html5/thumbnails/20.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022050402/5f7fd39359f5d82f173c09c6/html5/thumbnails/21.jpg)
Učitavanje niza JSON objekataGson gson = new GsonBuilder().create();
Employee[] employees = gson.fromJson(json, Employee[].class);