Autore Topic: JsonTokener  (Letto 239 volte)

iClaude

  • Visitatore
JsonTokener
« il: 03 Dicembre 2014, 12:51:52 CET »
0
Ho visto che x fare il parsing di stringhe JSON alcuni utilizzano la classe JsonTokener.
Tuttavia non ho ben capito la sua utilità.
Per fare il parsing da quanto ho capito si possono usare 2 sistemi:
1) usare i metodi di JSONReader e creare gli oggetti "mano a mano"
2) ricavare l'intera stringa JSON e passarla al costruttore di JSONObject o JSONArray.

A cosa serve quindi JsonTokener e in cosa si differenzia dalla soluzione 2?

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:JsonTokener
« Risposta #1 il: 03 Dicembre 2014, 13:44:43 CET »
0
1) Il metodo con JSONReader lavora "a stream" per cui ha il vantaggio di processare file JSON virtualmente infiniti, ma lo svantaggio di processare i dati nell'ordine in cui sono letti (implicazione non banale nel caso in cui tu abbia bisogno di un valore prima di leggerne altri).

2) Il metodo a JSONObject ha lo svantaggio di caricare tutto il JSON in memoria, ma ha il vantaggio di permettere l'accesso "a DOM" (cioè indipendente dall'ordine).

Io userei il metodo 2) per processare stringhe JSON corte (al max sul kilobyte), mentre usa il metodo 1) negli altri casi.


Per quanto riguarda il JsonTokener, alla fine mi sembra che crei un JsonObject.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

iClaude

  • Visitatore
Re:JsonTokener
« Risposta #2 il: 03 Dicembre 2014, 14:06:06 CET »
0
In effetti non capisco l'utilità nell'usare JsonTokener al posto del metodo 2.
L'unica differenza che vedo è che JsonTokener è lenient, quindi accetta anche valori non perfettamente formattati.

Offline LinkOut

  • Utente normale
  • ***
  • Post: 269
  • Respect: +37
    • Mostra profilo
  • Dispositivo Android:
    Xiaomi Mi5
Re:JsonTokener
« Risposta #3 il: 03 Dicembre 2014, 14:09:24 CET »
0
Concordo con la risposta di bradipao sul fatto del peso.

C'è da ricordare anche che in alcuni casi (vedi alcuni particolari casi di json polimorfici) vedi la domanda che avevo fatto: java - Jackson Polymorphic Deserialization expected START_ARRAY - Stack Overflow
Non è possibile usare Deserializer quindi bisogna deserializzare a manina.


Saluti.