Java API for JSON Processing – JSON nesneleri okumak ve yazmak
Merhabalar;
Bir önceki yazıda basit JSON dizi ve nesnelerinin nasıl oluşturulabileceğinden bahsetmiştik. Şimdi ise, var olan bu nesnelerin bir I/O ortamına (bu dosya sistemi veya ağ ortamı olabilir) nasıl kazınacağı, ve hali hazırda bir I/O ortamında bulunan JSON veri kümesinin, nasıl JSON-P nesnelerine dönüştürüleceğinden bahsetmek istiyorum.
Okuma ve yazma işlemleri için JSON-P içinde JsonReader ve JsonWriter isimli arayüzler kullanılıyor.
Örnek 1: JSON nesnesinin kazınması
JsonWriter türünden bir nesne Json sınıfının createWriter(..) static metoduyla oluşturulur. Metod parametre olarak OutputStream (Byte ırmağı) veya Writer (Karakter ırmağı) ailesinden nesneler kabul edebilir.
// Basit bir dizi JsonArray jsonArray = Json.createArrayBuilder() .add("Emin").add("Şahin").build(); // Json dizisi içeren, basit bir nesne JsonObject jsonObject = Json.createObjectBuilder() .add("ad", jsonArray) .add("soyad", "Demir") .build(); try (PrintWriter pw = new PrintWriter("D:\jsonObject.json")) { // JsonWriter oluşturuluyor JsonWriter jsonWriter = Json.createWriter(pw); // Json nesnesi dosya sistemine kazınıyor jsonWriter.writeObject(jsonObject); }
Bu haliyle uygulama çalıştırıldığında jsonObject.json dosyası içinde;
{ “ad” : [” Emin ” , ” Şahin “ ] ,” soyad ” : ” Demir ” } içeriğinin oluşturulduğu görülür.
jsonObject.json olarak kaydedilen json dosyasının içeriği okunması ve okunan veriden Json nesne ağacı oluşturulmak isteniyorsa, aşağıdaki kod bütünü kullanılabilir.
JsonReader reader = Json.createReader(new FileReader("D:\jsonObject.json")); JsonObject obj = reader.readObject(); System.out.println("Okunan: "+obj.toString());
JSON-P ile dosya yazma ve okuma yapıldığında varsayılan olarak, JSON ifadeleri beyaz boşluklar (white-space) arındırılmış olarak çıktılanır. Bu şekilde olmasının dosya boyutu bakımından avantajı var ama kompleks Json çıktılarında okunurluğu azaltan bir sebep. Eğer elde edilecek çıktının, daha okunur halde çıktılanması istenirse, try() { .. } ifadesi içerisi aşağıdaki kod bütünüyle değiştirilebilir.
// Pretty printing için config Map oluşturulur. Map<String, Boolean> config = new HashMap<>(); // Pretty printing özelliği eklenir. config.put(JsonGenerator.PRETTY_PRINTING, true); Json. createWriterFactory(config). // JsonWriterFactory createWriter(pw). // JsonWriter writeObject(jsonObject);
Bu işlem sonrası çıktının aşağıdaki gibi olduğu görülür.
{ "ad":[ "Emin", "Şahin" ], "soyad":"Demir" }
Örnek 2: Twitter Api’ den dönen Json verisinin tüketilmesi
Dosya sisteminde olduğu gibi, Json verilerinin okunması ve yazılması, bir ağ ortamında da gerçekleşebilir. Bu örnek, twitter üzerinde “kodcucom” içeren twit’leri Json formatında elde etmekte, ardından belleğe JSON-P nesnesi olarak oluşturmakta ve en son bu nesneyi dosya sistemine kazımaktadır.
// URL nesnesi oluşturuluyor. URL url = new URL("http://search.twitter.com/search.json?q=kodcucom&page=1"); // URL kaynağından bayt ırmağı nesnesi alınıyor InputStream is = url.openStream(); // Json nesne ağacı oluşturuluyor JsonObject twitterObj = Json .createReader(is) .readObject(); // Son olarak dosya sistemine kazınıyor. try (PrintWriter pw = new PrintWriter("D:\twitterObj.json")) { JsonWriter jsonWriter = Json.createWriter((pw)); jsonWriter.write(twitterObj); }
Örneklere buradan erişebilirsiniz.
Tekrar görüşmek dileğiyle..
1 Comment