Domanda

Sto facendo un uso piuttosto intenso dell'analisi JSON in un'app che sto scrivendo.La maggior parte di ciò che ho fatto è già implementato utilizzando la libreria JSONObject integrata di Android (è json-lib?).

JSONObject sembra creare istanze di assolutamente tutto nella stringa JSON...anche se alla fine non li userò tutti.

La mia app attualmente funziona abbastanza bene, anche su un G1.

La mia domanda è questa:i vantaggi in termini di velocità e memoria derivanti dall'utilizzo di un parser di flusso come Jackson valgono tutti i problemi?

Per guai intendo questo:Per quanto ne so, ci sono tre aspetti negativi nell'usare Jackson invece della libreria integrata:

  1. Dipendenza da una libreria esterna.Questo alla fine renderà il tuo .apk più grande.Non è un grosso problema.
  2. La tua app è più fragile.Poiché l'analisi non viene eseguita automaticamente, è più vulnerabile alle modifiche nel testo JSON che sta analizzando (forse mi sbaglio su questo).
  3. Scrivere codice per analizzare JSON tramite un parser di flusso è brutto e noioso.
È stato utile?

Soluzione

Immagino che tu hai praticamente risposto alla tua domanda. :)
Utilizzando il built-in JSON parser me stesso e non hanno mai cercato un'alternativa.

EDIT:. Ora sto utilizzando un sottile involucro di annotazione-based da DroidParts

Altri suggerimenti

Nella maggior parte dei casi utilizzo anche il parser JSON integrato, ma recentemente sono entrato in uno scenario in cui non si adatta:Per alcune richieste di servizi web ricevo documenti JSON di dimensioni superiori a 1 MB.Il caricamento di questi con il parser JSON integrato richiede enormi quantità di memoria principale e il risultato è OutOfMemoryException parecchie volte.Per questi scenari un parser di streaming è la scelta migliore (anche se è più scomodo da usare) e il parser JSON integrato non fornisce lo streaming, ma solo lo stile simile a DOM.

Per chiunque cerchi un parser JSON in streaming per Android, posso consigliarne vivamente l'utilizzo GSON di Google.All'inizio ho provato Jackson JSON e ha funzionato bene finché non ho provato a creare la versione di rilascio della mia app:ProGuard ha segnalato diversi problemi e l'app in esecuzione si è bloccata in modo misterioso NullPointerException nel costruttore di Jackson ObjectMapper (anche se tutto ha funzionato bene nella versione di debug).Anche dopo alcune ore di tentativi non sono riuscito a risolvere questo problema.Poi sono passato a GSON e tutto ha funzionato a meraviglia.

A proposito:Il jar GSON per solo streaming ha una dimensione di soli 14kB, quindi niente di cui preoccuparsi.

Credo questione è se incorporato in uno è abbastanza buono. Se lo è, certo, riducendo al minimo le dipendenze è spesso una buona strategia. Abbastanza buono può riferirsi sia l'efficienza e la facilità d'uso.

Per quel che vale, Jackson ha anche un modello ad albero decente, così come i dati completi vincolanti. modello ad albero è significativamente più veloce di parser di default (analisi è 3x-5x più veloce su J2SE, probabilmente in modo simile su altre piattaforme come Android, albero modello di per sé è probabilmente più efficiente pure). Oppure: se non si desidera dipendenza secondo vaso (mapper è necessaria per il modello albero e l'associazione dati), scrivere il proprio albero per coprire i casi d'uso è semplice troppo. O utilizzare fondamentali HashMap / ArrayList / involucri, o hanno le proprie classi, se si preferisce. Builder sarebbe forse 40 righe di codice in alto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top