Ich möchte Daten lesen, die in einer Datei gespeichert sind. Ich habe noch nicht entschieden, in welchem Format ich es speichern soll, aber ich suche nach einem Format, das leicht zu analysieren ist. Anfangs dachte ich, ich würde mit JSON gehen, aber es scheint, dass Java keinen eingebauten Parser für JSON hat.
Die gespeicherten Daten bestehen aus einer Menge von Datensätzen, wobei jeder Datensatz aus einer Reihe von Feldern besteht. Es ist also nicht einfach genug, in einer Textdatei gespeichert zu werden, die Zeile für Zeile gelesen werden kann. Deshalb denke ich, dass ich etwas wie JSON brauche. Aber ich möchte keine externen Bibliotheken hinzufügen, nur um das Format zu analysieren. Irgendwelche Vorschläge? Ich bin neu in Java.
Während Java viele keine Standard JSON-Parsing-Bibliothek hat, gibt es mehrere verfügbare Bibliotheken, die schnell, zuverlässig und einfach zu verwenden sind. Viele erlauben auch die Verwendung von standardmäßigen Objektbindungsmethoden wie JAXB , die Ihre Deserialisierungszuordnungen definieren Anmerkungen verwenden.
Ich bevorzuge Jackson selbst. Google-GSon ist ebenfalls beliebt, und Sie können sehen, wie einige Leute die beiden in dieser Frage vergleichen.
Sie möchten vielleicht weniger Angst davor haben, externe Bibliotheken zu verwenden. Es ist fast immer besser, eine vorhandene Bibliothek mit den gewünschten Funktionen zu verwenden, anstatt eigene zu erstellen. Und mit Tools wie Maven oder Ivy Um Abhängigkeiten automatisch von Ihrer Projektdefinition zu berechnen und herunterzuladen, gibt es wirklich keinen Grund zu befürchten, Bibliotheken zu verwenden.
Mit dem derzeitigen Stand der Java-XML-Unterstützung sollten Sie XML gleichermaßen verfügbar finden. Diese Antwort enthält ein einfaches Beispiel für die Verwendung von javax.xml.parsers.DocumentBuilder
um ein DOM zu generieren.
Wie viele andere darauf hingewiesen haben, liefert Java keine Standard-JSON-Parsing-Bibliothek als Teil des JDK. Wenn Sie JDK-gebündelte Technologie mit absolut KEINE Abhängigkeiten verwenden möchten, haben Sie 3 XML-Parsing-Optionen:
JETZT ist alles, was gesagt wird, die Arbeit mit diesen APIs, besonders wenn Sie neu sind, nicht die intuitivste der Welt. Wenn Sie schon einmal mit Java in Java geparst haben, wird es Ihnen gut gehen.
Wenn Sie eine kleine 3rd-Party-JAR in Betracht ziehen, werde ich Sie auf meine Einfache Java XML Parser (SJXP) Bibliothek . Es gibt Ihnen die Leichtigkeit von XPath mit der Leistung des STAX-Parsens; ehrlich (ich bin unvoreingenommen, ernsthaft) - es ist fantastisch.
Ich habe mehr als ein Jahr daran gearbeitet, während ich ein wirklich robustes Feed-Parsing-System geschrieben habe, das als SAX-basiertes System begann, dann zu STAX wechselte und je mehr ich daran arbeitete, desto klarer wurde mir, wie einfach ich es konnte abstrahiere die Schmerzen von STAX mit einfachen Regeln.
Sie können sich das Anwendungsbeispiel ansehen, aber Sie definieren es im Wesentlichen Übereinstimmende Regeln wie "/ library / book / title" analysieren alle Ihre Tag-Inhalte; Sie können Attribute und sogar Namespace-qualifizierte Werte analysieren (ja, es unterstützt auch Namespaces!)
Hier ist ein RSS-Feed-Parser-Beispiel:
%Vor%Dann übergeben Sie diese Regel einfach an den Parser, wenn Sie ihn wie folgt erstellen:
%Vor%Und du bist fertig; geben Sie dem Parser einfach Ihre XML-Dateien über Parse-Methode und Sie erhalten jedesmal Callbacks, wenn der Pfad übereinstimmt.
Ich habe den Overhead der Bibliothek über STAX bis zu dem Punkt, an dem er messbar nicht existiert, bewertet, profiliert und optimiert. Der eigentliche Patch-Abgleich erfolgt über zwischengespeicherte Hash-Codes, so dass ich im Parser nicht einmal Zeichenfolgenvergleiche durchführe.
Es ist wirklich schnell und funktioniert unter Android.
>Wenn Sie stattdessen JSON verwenden möchten, empfehle ich dringend, GSON zu verwenden. Jackson ist schneller, aber die API ist 37x komplexer als die GSON API.Sie werden mehr Zeit damit verbringen, genau herauszufinden, welche Klassen Sie in Jackson verwenden müssen, als Sie es mit GSON können.
Auch seit der letzten GSON-Version und dem Neuschreiben des Stream-Parsers wurde die Geschwindigkeitslücke ziemlich geschlossen; Sie können den Stream-Parser impl ihrer verwenden, um die Analysegeschwindigkeit von Jackson zu erhalten, wenn das kritisch ist.
Wenn Sie gesagt haben, ULTIMATE Geschwindigkeit über alles hinaus und das ist Priorität # 1, dann verwenden Sie Jackson.
Sie haben das bereits akzeptiert, aber allen scheint die Tatsache zu fehlen, dass Java über eine Standard-JSON-Bibliothek verfügt. Seit JDK 7 gibt es eine javax.json Paket in der Standardbibliothek.
javax.json ist das Java-Paket - beachten Sie auch, dass es eine extrem leichte Java-Alternative zu SAX gibt, genannt StAX (Streaming-API für XML) .
JSON v XML in der App, die Sie vorschlagen, hängt meiner Meinung nach viel mehr davon ab, was Sie mit den Daten tun werden und wie Sie es verarbeiten werden. Wenn Sie beispielsweise die Daten an eine Webseite senden und die Objektnotation verwenden müssen, um sie mit JavaScript zu verarbeiten, ist JSON die offensichtliche Wahl. Wenn Sie es nur anzeigen möchten, sollten Sie XHTML in Betracht ziehen und Ihr Backend auswählen, was angezeigt wird. Wenn Sie Daten zwischen verschiedenen Industriecomputern in B2B-Anwendungen übertragen, müssen Sie wahrscheinlich XML und Tags verwenden, die durch Industriestandards definiert sind.