Escape JSON string u Javi
1. Pregled
U ovom kratkom vodiču pokazat ćemo nekoliko načina za izbjegavanje JSON niza u Javi.
Kratko ćemo razgledati najpopularnije biblioteke za obradu JSON-a i njihove jednostavne zadatke.
2. Što bi moglo pogriješiti?
Razmotrimo jednostavan, ali uobičajen slučaj slanja korisničke poruke web usluzi. Naivno bismo mogli pokušati:
Opterećenje niza = "{\" poruka \ ": \" "+ poruka +" \ "}"; sendMessage (korisni teret);
Ali, stvarno, to može dovesti do mnogih problema.
Najjednostavnije je ako poruka sadrži citat:
{"message": "Moja" poruka "razbija json"}
Još gore je korisnik može svjesno razbiti semantiku zahtjeva. Ako pošalje:
Pozdrav "," role ":" admin
Tada poruka postaje:
{"message": "Hello", "role": "admin"}
Najjednostavniji pristup je zamjena navodnika odgovarajućim redoslijedom bijega:
Niz korisnog tereta = "{\" message \ ": \" "+ message.replace (" \ "", "\" ") +" \ "}";
Međutim, ovaj je pristup prilično krhak:
- To treba učiniti za svaku ujedinjenu vrijednost, i moramo uvijek imati na umu iz kojih smo žica već pobjegli
- Štoviše, kako se struktura poruke mijenja s vremenom, ovo može postati glavobolja održavanja
- I je teško se čita, što ga čini još sklonijim pogreškama
Jednostavno rečeno, moramo primijeniti općenitiji pristup. Nažalost, matične značajke obrade JSON još su u JEP fazi, tako da ćemo morati usmjeriti pogled na razne JSON knjižnice otvorenog koda.
Srećom, postoji nekoliko JSON-ovih knjižnica za obradu. Kratko ćemo pogledati tri najpopularnija.
3. JSON-java knjižnica
Najjednostavnija i najmanja knjižnica u našem pregledu je JSON-java također poznata kao org.json.
Da biste konstruirali JSON objekt, mi jednostavno stvorimo primjerak JSONObject i u osnovi se prema tome ponašaju kao prema Karta:
JSONObject jsonObject = novi JSONObject (); jsonObject.put ("poruka", "Pozdrav \" Svijet \ ""); Korisno opterećenje niza = jsonObject.toString ();
Ovo će uzeti citate oko "Svijeta" i pobjeći im:
{"message": "Pozdrav \" Svijet \ ""}
4. Jackson knjižnica
Jedna od najpopularnijih i najsvestranijih Java knjižnica za JSON obradu je Jackson.
Na prvi pogled, Jackson se ponaša slično kao org.json:
Parametri karte = novi HashMap (); params.put ("poruka", "Pozdrav \" Svijet \ ""); Opterećenje niza = novi ObjectMapper (). WriteValueAsString (params);
Međutim, Jackson također može podržati serializiranje Java objekata.
Pa hajde da malo poboljšamo naš primjer umotavanjem naše poruke u prilagođenu klasu:
klasa Korisno opterećenje {Korisno opterećenje (niz poruka) {this.message = message; } String poruka; // geteri i postavljači}
Zatim, trebamo primjerak ObjectMapper kojoj možemo proslijediti instancu svog objekta:
Niz korisnog tereta = novi ObjectMapper (). WriteValueAsString (novi korisni teret ("Pozdrav \" Svijet \ ""));
U oba slučaja dobivamo isti rezultat kao i prije:
{"message": "Pozdrav \" Svijet \ ""}
U slučajevima kada imamo već pobjeglo vlasništvo i trebamo ga serializirati bez daljnjeg bijega, možda bismo željeli koristiti Jacksonov @JsonRawValue napomena na tom polju.
5. Knjižnica Guava
Gson je Googleova knjižnica koja se često susreće s Jacksonom.
Možemo, naravno, učiniti kao i s org.json opet:
JsonObject json = novi JsonObject (); json.addProperty ("poruka", "Pozdrav \" Svijet \ ""); Opterećenje niza = novi Gson (). ToJson (gsonObject);
Ili možemo koristiti prilagođene objekte, kao kod Jacksona:
Niz korisnog tereta = novi Gson (). ToJson (novi korisni teret ("Pozdrav \" Svijet \ ""));
I opet ćemo dobiti isti rezultat.
6. Zaključak
U ovom kratkom članku vidjeli smo kako izbjeći JSON nizove u Javi koristeći različite biblioteke otvorenog koda.
Sav kôd povezan s ovim člankom možete pronaći na Githubu.