2012-03-16 15 views
7

Attualmente sto lavorando a un progetto in cui ho a che fare con una buona quantità di dati JSON trasmessi avanti e indietro e memorizzati dal browser come elenchi di oggetti javascript. Per esempio:libreria di manipolazione dei dati JSON Javascript

person: { 
    // Primary Key 
    key: "id", 
    // The actual records 
    table: { 
     "1": {id: 1, name: "John", surname: "Smith", age: 26}, 
     "2": {id: 2, name: "Mary", surname: "Brown", age: 19}, 
     // etc.. 
    }, 
    indexes: { 
     // Arrays of pointers to records defined above 
     "name": [ 
      {id: 89, name: "Aaron", surname: "Jones", age: 42}, 
      // etc.. 
     ] 
    } 

sto trovandomi codifica ogni sorta di indicizzazione e algoritmi di ordinamento di manipolare in modo efficiente questi dati e sto iniziando a pensare che questo genere di cose deve essere stato fatto prima.

Ho esperienza nell'uso degli oggetti Ext.data.Store e Ext.data.Record per eseguire questo tipo di manipolazione dei dati, ma penso che siano eccessivamente complessi per gli sviluppatori junior e il progetto a cui sto lavorando è una piccola applicazione mobile in cui non possiamo permetterci di avere una libreria 300K + aggiunta solo per il gusto di farlo, quindi ho bisogno di qualcosa di veramente minimo.

Tutte le idee, se esiste un quadro manipolazione JavaScript JSON che ha il seguente:

  1. Can negozio,
  2. recuperare,
  3. sorta,
  4. e iterare tramite dati JSON,
  5. con un API pulito,
  6. minimo sulle prestazioni di resistenza (Mobiles non avete un sacco di potenza di calcolo)
  7. e un piccolo carico utile che è idealmente < 10K?

potrei essere chiedendo troppo, ma si spera che qualcuno usato qualcosa di simile ... il genere di cosa che sto cercando il è l'equivalente JSON di jQuery, forse non è così stravagante.

risposta

10

dare uno sguardo su jsonQ

E fullfill tutti i requisiti puntato sulla questione.

  • Può memorizzare,
  • recuperare
  • e scorrere i dati JSON,

Fornire l'attraversamento (come trovare, fratelli, genitori, ecc) e il metodo di manipolazione come (valore, aggiungere, anteporre) ;

  • sorta

fornire un metodo ed ordinamento diretto metodo sorta di matrice che si muovono su oggetto jsonQ. (Sia metodo sort eseguire ricorsivamente)

  • con un'API pulito

È un processo di avere stessa API per JSON come jQuery DOM API. Quindi, se hai familiarità con jquery. È facile da raggiungere. Più completo documentation di apis è disponibile.

  • minimo sulle prestazioni di resistenza

Si crea un nuovo formato all'inizializzazione jsonQ di dati JSON utilizzata internamente per leggere i dati che sono più efficienti. (È come avere tutti i loop in una volta, quindi non devi fare loop over loop per iterare ogni volta che json).

  • e un piccolo carico utile che è idealmente < 10K?

versione minificata è 11,7 kb.

+0

Fantastico! Vorrei poter sopravvivere 5 volte! –

0

In realtà la tua domanda non è buona, suppongo. Dal tuo esempio si potrebbe vedere, che stai cercando di emulare storage di tipo SQL con JSON. Forse, devi solo prendere IndexedDB?

jsonpath corrisponde ai punti 4-7 (e forse 3) dei requisiti esatti e l'oggetto globale consente 1 e 2 con una sola chiamata per ciascuno.

Anche i requisiti IMHO sono irreali, specialmente con l'ultimo a proposito delle dimensioni.

+0

Ciao Kirilloid, grazie per la tua risposta. IndexedDB ha un'API molto complessa e richiede l'I/O del disco, che è un problema di prestazioni eccessivo. L'app è un'applicazione web a pagina singola, quindi JSON in-memory fornisce di gran lunga le migliori prestazioni. Sono d'accordo sul fatto che le dimensioni richieste sono piuttosto limitanti, ma non penso sia impossibile dato che sono solo dopo i metodi .get(), .set(), .index(), .each() e proprietà .data per tenere traccia del JSON .. Daremo un'occhiata a jsonpath e ti faccio sapere. –

+0

jsonpath è interessante, mi piace l'idea di provare a emulare XPath, ma non sono sicuro che sia quello che cerco dopo XPath è per i documenti non strutturati e sono più in memoria come in SQL memoria come te menzionato (dove c'è un modello di dati e entità distinte). –

+1

Xpath è anche per documenti strutturati, ma per ** albero ** - strutturato ;-) – kirilloid

0

Penso che Lawnchair sia qualcosa che stai cercando. La sua homepage dice che è stata pensata per i dispositivi mobili, tuttavia non l'ho mai usata prima, quindi non posso commentare in merito.

È un semplice archivio di valori-chiave, sebbene sia possibile definire i propri indici, come con CouchDB. Non ho visto il supporto per i selettori, tuttavia è disponibile un plug-in di query, promettendo una selezione facile.

Qualcosa come jQuery si basa su sfrigolare, che è la libreria di selettori CSS, che non è applicabile nel tuo caso. XPath è secondo me la scelta migliore, dal momento che è utilizzato principalmente con XML, una struttura ad albero.Poiché l'oggetto JSON può essere rappresentato come un albero, ho trovato JSONSelect, una piccola libreria che supporta i selettori di JSON Xpath in modo 'CSS-ish'.

Se si sarebbe in grado in qualche modo di collegare JSONSelect in Lawnchair, penso di aver trovato una grande combinazione :)

+0

La sedia a sdraio sembra piuttosto interessante .. –

Problemi correlati