Widzę wiele odniesień do "skompresowanego JSON", jeśli chodzi o różne formaty serializacji. Co to dokładnie jest? Czy to po prostu Gzip JSON czy coś innego?Co to jest "skompresowany JSON"?
Odpowiedz
skompresowane JSON usuwa klucz: pary wartości kodowania JSON do przechowywania kluczy i wartości w oddzielnych równoległych tablic:
// 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' ]
};
Taki sposób użytkowania znalazłem tutaj
Zawartość z linkiem (http://www.nwhite.net/?p=242)
rzadko znajduję się w miejscu, w którym piszę aplikacje javascript, które używają AJAX w czystej postaci. Dawno porzuciłem "X" i zastąpiłem go "J" (JSON). Podczas pracy z Javascriptem po prostu ma sens zwrócenie JSON. Mniejsze rozmiary, łatwiejsze analizowanie i łatwiejsza struktura to wszystkie zalety, które zdobyłem od czasu użycia JSON.
W ostatnim projekcie nie byłem zadowolony z dużego rozmiaru zestawów wyników. Dane, które zwróciłem, to dane tabelaryczne, w postaci obiektów dla każdego wiersza. Zwróciłem zestaw wyników 50, z 19 polami. Uświadomiłem sobie, że jeśli zwiększę swój zestaw wyników, mogę uzyskać kompresję.
// nieskompresowany
JSON = {
data : [
{ field1 : 'data1', field2 : 'data2', field3 : 'data3' },
{ field1 : 'data4', field2 : 'data5', field3 : 'data6' },
.....
]
};
// sprężone
JSON = {
data : [ 'data1','data2','data3','data4','data5','data6' ],
keys : [ 'field1', 'field2', 'field3' ]
};
I połączył wszystkie moje wartości w jednej tablicy i przechowywać wszystkie swoje pola w oddzielnej tablicy. Zwrócenie pary klucz-wartość dla każdego wyniku kosztowało mnie 8800 bajtów (8,6 KB). Zgrywanie pól i umieszczanie ich w osobnej tablicy kosztowało mnie 186 bajtów. Całkowite oszczędności 8,4kb.
Teraz mam znacznie bardziej skompresowany plik JSON, ale struktura jest inna, a teraz trudniej z nią pracować. Dlatego zaimplementowałem rozwiązanie w Mootools, aby dekompresja była przejrzysta.
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){}
});
Przepuścić tyle przedmiotów, ile chcesz, aby nadmuchać tablicę. Ma ona opcjonalną właściwość o nazwie "sklep". Jeśli ustawiono, zawyżony zestaw danych zostanie zapisany w tym kluczu.
"Klucze" i "pola" oczekują ciągów pasujących do lokalizacji w katalogu głównym obiektu JSON.
Najbardziej prawdopodobną odpowiedzią jest to, że naprawdę jest to tylko zgnieciony JSON. Nie ma innego standardowego znaczenia tego wyrażenia.
Ponowna organizacja jednorodnej tablicy obiektów JSON w parę tablic jest bardzo przydatną techniką zmniejszania obciążenia i przyspieszania kodowania i dekodowania, nie jest powszechnie nazywana "skompresowanym JSON". Nie natknąłem się na niego nigdy w otwartym kodzie źródłowym ani żadnym otwartym API, ale używamy tej techniki wewnętrznie i nazywamy ją "jsontable".
siedzibą w odpowiedzi Paniyar, możemy przekonwertować Lista obiektów w „skompresowany” Json formatu przy użyciu C# tak:
var JsonString = serializer.Serialize(
new
{
cols = new[] { "field1", "field2", "field3"},
items = data.Select(x => new object[] {x.field1, x.field2, x.field3})
});
Kiedyś tablicę obiektu ponieważ pola może być int, bool, string ...
Więcej Redukcja: Jeśli pole jest powtarzany bardzo często i jest to typ string, można uzyskać sprężone trochę bardziej, jeśli dodać odrębną listę tej dziedzinie ... na przykład, nazwa pola stanowisko pracy, miasto itp. są dla tego znakomitym kandydatem. Możesz dodać odrębną listę tych pozycji i dla każdej pozycji zmień wartość dla numeru referencyjnego. To sprawi, że twój Json będzie lite.
Compressed:
[["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"]]
nieskompresowany:
[{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. Co to jest Serializable? Co to znaczy?
- 2. Co to jest nowy [] skrót?
- 3. Co to jest "usuń to"?
- 4. Co to jest oktet JSON i dlaczego są wymagane dwie?
- 5. Rozwój Androida: plik prawdopodobnie jest skompresowany
- 6. Co to jest Pagel?
- 7. Co to jest _GLOBAL_OFFSET_TABLE?
- 8. Co to jest "android.R.layout.simple_list_item_1"?
- 9. Co to jest DetailsView.EnableModelValidation?
- 10. Co to jest NSPathStore2?
- 11. Co to jest czasownik = "*"?
- 12. Co to jest Postgresql_psycopg2?
- 13. Co to jest ?
- 14. co to jest .netrwhist?
- 15. co to jest Microsoft.Practices.EnterpriseLibrary.Data
- 16. Co to jest CGVector?
- 17. Co to jest $ {project.licensePath}?
- 18. co to jest alloc.h?
- 19. Co to jest PurpleEventCallback?
- 20. Co to jest global ::?
- 21. Co to jest? rodzaj?
- 22. Co to jest __meteor_bootstrap__?
- 23. Co to jest NuGetPackageImportStamp?
- 24. Co to jest LazyList?
- 25. Co to jest IllegalStateException?
- 26. Co to jest "loadall.so"?
- 27. Co to jest ws: //?
- 28. Co to jest DNVM?
- 29. Co to jest kthreadd_task
- 30. Co to jest AppDomain?
ten dostaje mój upvote czy można dodać cytat ... nigdy nie słyszałem o tym wcześniej i brzmi całkiem fajne. – Domenic
Coś wartego uwagi w artykule, komentator "Isaac Schlueter" udowadnia poprzez porównanie, że ta metoda jest mniej wydajna niż samo używanie gzip, chociaż autor zauważa, że nie wszystkie przeglądarki akceptują gzip. – Seanny123
Oba łącza są teraz nieczynne. Czy są jakieś biblioteki, które to wspierają? – Nisarg