Java JSON Decode – Tutorial

Posted: Dezember 4th, 2013 | Filed under: Java, Programmieren | Tags: , , , , | 9 Comments »

imageDa sich JSON aus meiner Sicht immer mehr gegenüber dem Klassiker XML durchsetzt und ich mittlerweile auch die Verwendung einer JSON-Datei gegenüber einer gängigen “Property-Datei” (*.ini) bevorzuge, hier ein kleines Tutorial mit Hilfe ihr von Googles JSON-Bibliothek gson Json-Dateien einlesen bzw. erzeugen könnt.

GSON Bibliothek herunterladen und einbinden

Zu allererst müsst ihr die Java-Bibliothek gson herunterladen: https://code.google.com/p/google-gson/downloads/list und entpacken. Für die Verwendung benötigt ihr lediglich die Datei gson-X.X.X.jar.

image

Falls ihr eclipse als IDE eurer Wahl verwendet, könnt ihr hier nachlesen wie ihr diese genau einbindet (unter dem Abschnitt  “Bibliothek ins Projekt importieren”).

JSON-Datei lesen

Als Beispiel verwende ich folgende, relativ simple JSON-Datei, welche dennoch alle wichtigen Strukturen wie Array oder Objekt beinhaltet.

personen.json

{
   "personen" : [
      {
         "name" : "Frank",
         "alter" : 27,
         "hobbys" : [
            {
               "name" : "Karlsruher SC"
            },
            {
               "name" : "Computer spielen"
            }
         ]
      },
      {
         "name" : "Peter",
         "alter" : 21,
         "hobbys" : [
            {
               "name" : "Tennis"
            },
            {
               "name" : "Boxen"
            }
         ]
      }
   ]
}

Prinzipiell kann man JSON-Dateien mit Hilfe zwei verschiedener Vorgehensweise auslesen. Entweder direkt über ein vorhandenes Java-Objekt, oder allgemein über das sogenannte JsonObject. In diesem Beispiel verwende ich den Weg über das JsonObject.

GsonExample.java

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStreamReader;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;

public class GsonExample {

    public static void main(String[] args) {
        Gson gson = new Gson();
       
        try {
            // Datei "personen.json" über einen Stream einlesen
            FileInputStream input = new FileInputStream("personen.json");
            BufferedReader reader = new BufferedReader(new InputStreamReader(input));
           
            // Datei als JSON-Objekt einlesen
            JsonObject json = gson.fromJson(reader, JsonObject.class);
           
            // Attribut "personen" als Array lesen
            JsonArray personen = json.getAsJsonArray("personen");

            for(int i = 0; i < personen.size(); i++){
                JsonObject person = personen.get(i).getAsJsonObject();
               
                // Attribute ausgeben z.B.: name, alter und hobbies
                System.out.println(person.get("name").getAsString());
                System.out.println(person.get("alter").getAsInt());
               
                // Attribut "hobbys" als Array lesen
                JsonArray hobbys = person.get("hobbys").getAsJsonArray();
           
                for(int k = 0; k < hobbys.size(); k++){
                    JsonObject hobby = hobbys.get(k).getAsJsonObject();
                   
                    // Name des Hobbys ausgeben
                    System.out.println(hobby.get("name").getAsString());
                }
                System.out.println("------");
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}

Konsolenausgabe

Frank
27
Karlsruher SC
Computer spielen
——
Peter
21
Tennis
Boxen
——

Ich hoffe ich konnte dem ein oder anderen damit helfen. Wie ihr ein vorhandenes Java-Objekt inklusive der vollständigen Daten-Struktur in eine JSON-Datei umwandelt und wieder einliest zeige ich euch das nächste mal.


Java String in Base64 konvertieren

Posted: November 26th, 2013 | Filed under: Java, Programmieren, Tutorials | Tags: , , , , , , , | No Comments »

Mittels Base64 kann man beliebige Binärdaten oder Strings in eine Zeichenfolge aus lesbaren ASCII-Zeichen umwandeln. Momentan setzte ich Base64 ein, um sonderzeichenbehaftet Datei-Pfade in “harmlose” Strings umzuwandeln.  Ein wenig erstaunt hat mich, dass Java dies von Haus aus nicht kann.

Um ein String in Java problemlos in eine Base64-Zeichenketten umzuwandeln könnt ihr die Bibliothek commons-codec aus dem Hause Apache verwenden:

Herunteladen der Bibliothek

Ladet die aktuelle Version der Bibliothek hier runter:

http://commons.apache.org/proper/commons-codec/download_codec.cgi

Zum Beispiel diese hier: http://apache.mirror.iphh.net//commons/codec/binaries/commons-codec-1.8-bin.zip

Entpacken

In der Zip-Datei befinden sich häufig viele *.jar-Dateien, ihr benötigt lediglich die rot markiert Datei. Entpackt diese.

image

Bibliothek ins Projekt importieren

Jetzt müsst ihr die Bibliothek in Form der Jar-Datei in euer Projekt importieren. In eclipse könnt ihr das über die Projekteigenschaften umsetzen. Idealerweise kopiert ihr eure verwendeten Bibliotheken in ein Verzeichnis innerhalb des Projektes, zum Beispiel in den Ordner Libs: [projektname]\lib\commons-codec-1.8.jar

image

image

image

image

image

String in Base64

Nachdem ihr die Bibliothek commons-codecs erfolgreich eingebunden habt, könnt ihr wie folgt Strings nach Base64 codieren.

import org.apache.commons.codec.binary.Base64;

public class ConvertStringToBase64 {

    public static void main(String[] args) {

        String text = "Hallo, was geht ab!";

        // Einen String in Base64 konvertieren (encode)
        String base64 = new String(Base64.encodeBase64(text.getBytes()));

        System.out.println(base64);

        // Einen Base64-String wieder zurück konvertieren (decode)
        String text2 = new String(Base64.decodeBase64(base64));

        System.out.println(text2);
    }
}

Konsolenausgabe:

SGFsbG8sIHdhcyBnZWh0IGFiIQ==
Hallo, was geht ab!

Das war’s auch schon, hoffe ich konnte dem ein oder anderen von euch helfen  😉


Java: Internetseiten auslesen – Web Scraping mit jSoup

Posted: November 4th, 2013 | Filed under: Internet, Java, Programmieren, Tutorials | Tags: , , , , , , , , | 2 Comments »

imageUm Informationen aus einer Webseite heraus zu extrahieren (engl. web scraping), gibt es viele verschiedene Vorgehensweisen und Frameworks. Nach langer Suche bin ich endlich auf ein einfaches und gut dokumentiertes Framework gestoßen: jSoup

jSoup ist eine Java-Bibliothek mit der es möglich ist mittels CSS-Selektoren und dem Document Object Model (DOM), Seiteninhalte extrem einfach abzugreifen. Das folgende Beispiel erläutert die Funktionsweise des Frameworks und die Einfachheit der Handhabung.

Webseite analysieren

Ziel unseres Tutorial ist es, auf der Wikipedia Startseite die Ereignisse der “Was geschah am <aktuelles Datum>?”-Kategorie auszulesen.

Mit Hilfe der Debug-Konsole im Google Chrome Browser und dem Inspektor ist es möglich die HTML-Struktur zu genau zu analysieren. Unsere Informationen die wir abgreifen möchten befinden sich in einer Liste innerhalb des DIV mit der Id hauptseite-ereignisse.

image

Beispiel – Wikipedia parsen

Herunterladen könnt ihr die Java-Bibliothek jSoup hier: http://jsoup.org/download

Nachdem ihr die .jar-Datei jsoup-X.X.X.jar in euer Projekt eingebunden habt (so wird’s gemacht http://www.javabeginners.de/Grundlagen/Bibliothek_einbinden.php), könnt die das Framework wie folgt verwenden:

import java.io.IOException;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class jSoupExample {

    public static void main(String[] args) {

        try {
            // Wikipedia Seite laden
            Document doc = Jsoup.connect("http://de.wikipedia.org/wiki/Wikipedia:Hauptseite").get();
           
            // Alle Listenelemente über den entsprechenden Selektor markieren
            // Ein Leerzeichen initiert ein Kindelement des Elternelementes (links)
            // div#hauptseite-ergeignisse  => Der DIV mit der ID hauptseite-ereignisse (# => id)
            // div.inhalt => Der DIV mit der Klasse inhalt (. => class)
            Elements ereignisse = doc.select("div#hauptseite-ereignisse div.inhalt ul li"); 

            // Selektierte Elemente ausgeben ohne HTML-Tags
            for (Element e : ereignisse) {
                System.out.println(e.text());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Konsolenausgabe

Führt man das obige Quellcode-Stück aus, so wird unser gewünschter Inhalt zeilenweise wie folgt ausgegeben:

1763 – In Havanna wird mit dem Bau der Festungsanlage San Carlos de La Cabaña begonnen.
1813 – Der an der badischen Revolution von 1848/49 beteiligte Politiker Lorenz Brentano, nach deren Scheitern im US-Exil und dort 1877 bis 1879 Kongress­abgeordneter, kommt zur Welt.
1913 – Am Königlichen Hoftheater Stuttgart wird Walter Braunfels’ Oper Ulenspiegel uraufgeführt.
1913 – Ein von Marseille kommender Schnellzug kollidiert bei Melun mit einem Postzug.
1988 – Die Uraufführung von Thomas Bernhards Drama Heldenplatz am Wiener Burgtheater löst einen Skandal aus.

Alternativen

Viel Spaß beim Auslesen!


Java Liste mit Strings alphabetisch auf- bzw. absteigend sortieren

Posted: März 21st, 2013 | Filed under: Java, Programmieren, Tutorials | Tags: , , , , , , , , , | 8 Comments »

In Zukunft will ich mal wieder öfters was zum Thema Java schreiben. Ich werde versuchen ein Sammelsurium an Java Grundlagen zu erarbeiten so dass nach und nach eine Art Nachschlagewerk entsteht.

Anfangen will ich mit dem Sortieren von Listen welche Strings enthalten. Über die Klasse Collections besteht die Möglichkeit Listen automatisiert zu sortieren bzw. neu anzuordnen. Das folgende Beispiel beschreibt wie einfach dies zu realisieren ist.

Beispiel – ArrayList alphabetisch sortieren


import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class SortableExample {
  public static void main(String[] args) {
    
    /* Liste anlegen, die Strings enthält */
    List<String> namen = new ArrayList<String>();
    
    /* Namen hinzufügen */
    namen.add("Peter");
    namen.add("Frank");
    namen.add("Hans");
    
    /* Liste alphabetisch aufsteigend sortieren (a...z) */
    Collections.sort(namen);
    
    /* Ausgabe: Frank Hans Peter */
    for(String name : namen){
      System.out.println(name);
    }
    
    /* Liste alphabetisch absteigend sortieren (z...a) */
    Collections.sort(namen);
    Collections.reverse(namen);
    
    /* Ausgabe: Peter Hans Frank */
    for(String name : namen){
      System.out.println(name);
    }
  }
}

UML Diagramm aus Java Code erzeugen

Posted: Januar 8th, 2013 | Filed under: Java, Software | Tags: , , , | 1 Comment »

Aus Dokumentationsgründen ist es oft notwendig aus bestehendem Quellcode UML-Diagramme zu erzeugen. Seit einiger Zeit benutze ich das schwedische Tool EssModel, welches einfach und schnell zu bedienen ist.

Über den “File > Open folder …” könnt ihr einfach den Source-Ordner eures Java-Projekts angeben.

image

Um alle Assoziationen und Vererbungen im UML-Diagramm anzuzeigen, sollte in der Hauptansicht unter Connections folgender Wert ausgewählt werden:

image

Unter dem Menüpunkt “Diagram > Save as picture…” kann man das ausgewählte Diagramm schließlich exportieren.

Download

Herunterladen könnt ihr EssModel hier: http://essmodel.sourceforge.net/