Frage

Ich mache ziemlich starke Nutzung von JSON Parsen in einer App schreibe ich. Das meiste, was ich getan habe, ist bereits in JSONObject Bibliothek gebaut mit Android implementiert (wird JSon-lib?).

JSONObject erscheint Instanzen absolut alles in dem JSON-String zu erstellen ... auch wenn ich am Ende nicht alle von ihnen verwenden.

Meine App zur Zeit läuft ziemlich gut, auch auf einem G1.

Meine Frage ist: sind die Geschwindigkeit und Speicher Vorteile aus der Verwendung eines Strom-Parser wie Jackson wert all die Mühe

Durch die Schwierigkeiten, meine ich dies: Soweit ich das beurteilen kann, gibt es drei Nachteile zur Verwendung von Jackson statt dem in der Bibliothek aufgebaut:

  1. Die Abhängigkeit von einer externen Bibliothek. Das macht Ihren APK größer am Ende. Keine große Sache.
  2. Ihre App ist zerbrechlicher. Da die Analyse nicht automatisch erfolgt, ist es anfälliger für Änderungen im JSON-Text ist, dass es das Parsen (vielleicht darüber, ich bin falsch).
  3. Code Schreiben JSON parsen über einen Stream-Parser ist hässlich und langweilig.
War es hilfreich?

Lösung

Erraten Sie haben ziemlich viel Ihre eigene Frage beantwortet. :)
Mit dem integrierten in JSON-Parser selbst und haben noch nie eine Alternative gesucht.

EDIT:. Jetzt bin ich mit einer dünnen Annotation-basierte Wrapper von DroidParts

Andere Tipps

Ich verwende auch die Build-in JSON-Parser in den meisten Fällen, aber vor kurzem in ein Szenario trat, wo es nicht passt: Bei einigen Web-Service-Anfragen erhalte ich JSON Dokumente von mehr als 1 MB. diese mit dem build-in JSON-Parser Laden erfordert enorme Mengen an Hauptspeicher und führte zu OutOfMemoryException mehrmals. Für diese Szenarien ein Streaming-Parser ist die bessere Wahl und die eingebauten in JSON-Parser-Streaming bietet keine (auch wenn es unbequem in Gebrauch ist), sondern nur die DOM-Stil.

Für alle, für einen Streaming-JSON-Parser für Android Ich möchte, kann dringend empfohlen Google Gson zu verwenden. Ich habe auf dem ersten Jackson JSON ausprobiert und es hat gut funktioniert, bis ich die Release-Version meiner App zu bauen versucht: ProGuard mehr Probleme gemeldet und die laufende App abgestürzt mit mysteriösen NullPointerException im Konstruktor von Jackson ObjectMapper (obwohl alles in Ordnung in der Debug gearbeitet Ausführung). Bereits nach wenigen Stunden zu versuchen, da war ich nicht in der Lage, dies zu beheben. Ich wechselte dann zu Gson dann und alles funktionierte wie ein Charme.

BTW:. Die Gson Streaming-only Glas mit einer Größe von nur 14kB hat - also nichts, um wirklich zu kümmern

Ich denke, die Frage, ob eingebaute in einem gut genug ist. Wenn ja, sicher, Abhängigkeiten zu minimieren ist oft eine gute Strategie. Genügend kann sowohl Effizienz beziehen und einfache Bedienung.

Für das, was es wert ist, Jackson hat auch ein anständiges Baummodell sowie vollständige Datenbindung. Baummodell ist deutlich schneller als Standard-Parser (Parsing ist 3x-5x schneller auf J2SE, wahrscheinlich in ähnlicher Weise auf anderen Plattformen wie Android, Baummodell selbst ist wahrscheinlich effizienter als auch). Oder: Wenn Sie die Abhängigkeit zu dem zweiten Glas nicht wollen (Mapper benötigt für Baummodell und Datenbindung), Ihren eigenen Baum Schreiben Sie Ihre Anwendungsfälle abzudecken ist zu einfach. Entweder verwenden grundlegende HashMap / Arraylist / Wrapper oder Ihre eigenen Klassen haben, wenn Sie es vorziehen. Builder würde vielleicht 40 Zeilen Code oben sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top