jsonai.fon.bg.ac.rs/wp-content/uploads/2020/04/json.pdf · 2020-04-11 · json objekat •...
TRANSCRIPT
JSONJavaScript Object Notation
Nikola Milikić
Milan Šuša
Bojan Tomić
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
Primer
{
"title" : "The Matrix",
"producer" : "Joel Silver",
"release_year" : 1999
}
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 ( , )
Primer JSON objekta
{
"title" : "The Matrix",
"producer" : "Joel Silver",
"release_year" : 1999
}
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
JSON niz
• JSON niz predstavlja uređenu sekvencu JSON objekata
• Počinje simbolom [ , a završava simbolom ]
• Objekti su razdvojeni zapetom
Primer JSON niza[ { "title” : "The Matrix", "producer" : "Joel Silver", "release_year" : 1999 }, { "title" : "Equilibrium", "producers" :[ { "name" : "Joel Silver" }, { "name" : "Lucas Foster" } ], "release_year" : 1999 }]
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
JSON vs XML - primer(preuzeto sa: https://www.w3schools.com/js/js_json_xml.asp)
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...
Generisanje JSON-a i parsiranje• Biblioteke u Javi za manipulisanje JSON-om:• org.json
• Google Gson
• Jackson
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
Glavne funkcionalnosti Gson-a• Omogućava jednostavnu konverziju iz Java objekata
u JSON i obratno preko metoda toJson() i fromJson()
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
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();
Deserijalizacija iz JSON fajlaFileReader reader = new FileReader("employee.json");
Gson gson = new GsonBuilder().create();
Employee emp = gson.fromJson(reader, Employee.class);
Ručno kreiranje JSON objektaJsonObject employeeJson = new JsonObject();
employeeJson.addProperty("firstName", "John");
employeeJson.addProperty("surname", "Smith");
{
"firstName" : "John", "surname" : "Smith"
}
JsonElement klasa
Izmena naziva JSON atributa i izuzimanje iz serijalizacije
public class Employee {
@SerializedName("firstName")
private String name;
private transient String lastname;
(getter)
(setter)
….
}
Učitavanje niza JSON objekataGson gson = new GsonBuilder().create();
Employee[] employees = gson.fromJson(json, Employee[].class);