Vedo molti riferimenti a "JSON compresso" quando si tratta di diversi formati di serializzazione. Cosa è esattamente? È solo gzip JSON o qualcos'altro?Che cos'è "JSON compresso"?
risposta
compresso JSON rimuove la chiave: coppia di valori di codifica di json per memorizzare le chiavi e valori in file parallele separate:
// uncompressed
JSON = {
data : [
{ field1 : 'data1', field2 : 'data2', field3 : 'data3' },
{ field1 : 'data4', field2 : 'data5', field3 : 'data6' },
.....
]
};
//compressed
JSON = {
data : [ 'data1','data2','data3','data4','data5','data6' ],
keys : [ 'field1', 'field2', 'field3' ]
};
Questo metodo di utilizzo ho trovato qui
contenuto da collegamento (http://www.nwhite.net/?p=242)
raramente mi trovo in un luogo in cui sto scrivendo applicazioni javascript che utilizzano AJAX nella sua forma pura. Ho abbandonato da tempo la 'X' e l'ho sostituita con 'J' (JSON). Quando lavori con Javascript, ha senso restituire JSON. Ingombro ridotto, analisi più semplice e struttura più semplice sono tutti vantaggi che ho acquisito da quando utilizzo JSON.
In un recente progetto mi sono trovato insoddisfatto delle grandi dimensioni dei miei set di risultati. I dati che stavo restituendo erano dati tabulari, sotto forma di oggetti per ogni riga. Stavo restituendo un set di risultati di 50, con 19 campi ciascuno. Quello che ho capito è che se aumentassi il mio set di risultati potrei ottenere una forma di compressione.
// non compresso
JSON = {
data : [
{ field1 : 'data1', field2 : 'data2', field3 : 'data3' },
{ field1 : 'data4', field2 : 'data5', field3 : 'data6' },
.....
]
};
// compressa
JSON = {
data : [ 'data1','data2','data3','data4','data5','data6' ],
keys : [ 'field1', 'field2', 'field3' ]
};
ho fuso tutti i miei valori in un singolo array e memorizzare tutti i miei campi in un array separato. Restituire una coppia di valori chiave per ogni risultato mi è costata 8800 byte (8.6kb). Rippare i campi e metterli in un array separato mi è costato 186 byte. Risparmio totale 8.4kb.
Ora ho un file JSON molto più compresso, ma la struttura è diversa e ora è più difficile lavorare con. Quindi implemento una soluzione in Mootools per rendere trasparente la decompressione.
Request.JSON.extend({
options : {
inflate : []
}
});
Request.JSON.implement({
success : function(text){
this.response.json = JSON.decode(text, this.options.secure);
if(this.options.inflate.length){
this.options.inflate.each(function(rule){
var ret = ($defined(rule.store)) ? this.response.json[rule.store] : this.response.json[rule.data];
ret = this.expandData(this.response.json[rule.data], this.response.json[rule.keys]);
},this);
}
this.onSuccess(this.response.json, text);
},
expandData : function(data,keys){
var arr = [];
var len = data.length; var klen = keys.length;
var start = 0; var stop = klen;
while(stop < len){
arr.push(data.slice(start,stop).associate(keys));
start = stop; stop += klen;
}
return arr;
}
});
Request.JSON now has an inflate option. You can inflate multiple segments of your JSON object if you so desire.
Usage:
new Request.JSON({
url : 'url',
inflate : [{ 'keys' : 'fields', 'data' : 'data' }]
onComplete : function(json){}
});
Passare il numero di oggetti di gonfiaggio desiderato nell'opzione di gonfiaggio dell'array. Ha una proprietà opzionale chiamata 'store' Se si imposta il set di dati gonfiati verrà invece memorizzato in quella chiave.
Le "chiavi" e i "campi" prevedono che le stringhe corrispondano a una posizione nella radice dell'oggetto JSON.
La risposta più probabile è che sia davvero solo gzip JSON. Non c'è altro significato standard per questa frase.
Ri-organizzare una matrice omogenea di oggetti JSON in una coppia di matrici è una tecnica molto utile per ridurre il carico utile e accelerare la codifica e la decodifica, non è comunemente chiamato "JSON compresso". Non l'ho mai incontrato in open source o API aperte, ma usiamo questa tecnica internamente e la chiamiamo "jsontable".
sede a risposta di Paniyar, possiamo convertire un elenco di oggetti in "compresso" JSON formato utilizzando C# in questo modo:
var JsonString = serializer.Serialize(
new
{
cols = new[] { "field1", "field2", "field3"},
items = data.Select(x => new object[] {x.field1, x.field2, x.field3})
});
ho usato un array di oggetti perché i campi possono essere int, bool, string ...
Più di riduzione: Se il campo si ripete molto spesso ed è un tipo stringa, è possibile ottenere un po 'compresso essere più se si aggiunge una lista distinta di quel campo ... per esempio, un nome di campo posizione di lavoro, città, ecc sono eccellenti candidati per questo. È possibile aggiungere un elenco distinto di questi elementi e in ciascuna voce modificare il valore per un numero di riferimento. Ciò renderà il tuo Json più lite.
compressa:
[["KeyA", "KeyB", "KeyC", "KeyD", "KeyE", "KeyF"],
["ValA1", "ValB1", "ValC1", "ValD1", "ValE1", "ValF1"],
["ValA2", "ValB2", "ValC2", "ValD2", "ValE2", "ValF2"],
["ValA3", "ValB3", "ValC3", "ValD3", "ValE3", "ValF3"],
["ValA4", "ValB4", "ValC4", "ValD4", "ValE4", "ValF4"]]
non compresso:
[{KeyA: "ValA1", KeyB: "ValB1", KeyC: "ValC1", KeyD: "ValD1", KeyE: "ValE1", KeyF: "ValF1"},
{KeyA: "ValA2", KeyB: "ValB2", KeyC: "ValC2", KeyD: "ValD2", KeyE: "ValE2", KeyF: "ValF2"},
{KeyA: "ValA3", KeyB: "ValB3", KeyC: "ValC3", KeyD: "ValD3", KeyE: "ValE3", KeyF: "ValF3"},
{KeyA: "ValA4", KeyB: "ValB4", KeyC: "ValC4", KeyD: "ValD4", KeyE: "ValE4", KeyF: "ValF4"}]
- 1. Come posso determinare che CollapsingToolbar sia compresso?
- 2. Un archivio compresso appendibile
- 3. java.lang.OutOfMemoryError: spazio classe compresso
- 4. Bootstrap Menu compresso Collegamenti che non funzionano sui dispositivi mobili
- 5. MySQL row_format compresso vs dinamico
- 6. jquery "Minified" "Non compresso" file
- 7. tee in un file compresso
- 8. elemento di avvio inizialmente compresso
- 9. Come posso inviare JSON compresso (gzip) come risposta a una richiesta Ajax, da Java?
- 10. Il pacchetto compresso gzip Webpack non viene servito, il pacchetto non compresso è
- 11. Quando dovrei usare il protocollo compresso MySQL?
- 12. Silverlight Controllo fisarmonica: tutto compresso quando caricato
- 13. Compressore Django non rigenerato CSS compresso
- 14. Sviluppo Android: il file è probabilmente compresso
- 15. Differenza tra EOT lite e EOT compresso
- 16. Grafico compresso da cluster in igraph
- 17. Ingresso compresso BZip2 per Apache Flink
- 18. ListView con Expander nidificato non compresso
- 19. Può essere compresso ClickOnce l'installazione dell'applicazione distribuita?
- 20. Espansione del codice compresso in IDE Eclipse
- 21. Mantenimento del codice compresso - Eclipse IDE
- 22. Come utilizzare awk per un file compresso
- 23. Collo di avvio compresso con reazione js
- 24. JSON SerDe per Hive che supporta matrici JSON
- 25. Clojure ring wrap-json-params che incasina gli array JSON
- 26. Prevenire RecyclerView dallo scorrimento in AppBarLayout prima che AppBarLayout venga compresso
- 27. Servizio REST che può utilizzare sia JSON che Multipart Form
- 28. C# JSON Post che utilizza HttpWebRequest
- 29. GSON che analizza il campo dinamico JSON
- 30. JSON.parse che analizza JSON con oggetti nidificati
Si ottiene la mia upvote se è possibile aggiungere una citazione ... mai sentito parlare prima e suona piuttosto fresco. – Domenic
Qualcosa da notare dall'articolo, un commentatore "Isaac Schlueter" dimostra attraverso il confronto che questo metodo è meno efficiente di un semplice utilizzo di gzip, anche se l'autore nota che non tutti i browser accettano gzip. – Seanny123
Entrambi i link sono morti ora. Ci sono delle librerie che supportano questo? – Nisarg