Comment compresser des réponses JSON

Je suis avec beaucoup d'appels ajax pour interroger la base de données et je reçois un grand texte (json) des réponses. Je souhaite compresser la réponse.

Il est un excellent moyen de compression du texte à l'aide de javascript dans JavaScript mise en œuvre de Gzip.

Le problème c'est que je veux compresser la réponse sur mon aspx serveur et decmpress avec javascript. Donc j'ai besoin d'exécuter le lzw_encode fonction sur mon asp.net serveur. Dois-je-je traduire cette fonction de C# ou il y a un autre moyen?

En utilisant le lien ci-dessus si vous ne voulez pas configurer IIS ou modifier les en-tête, vous pouvez compresser le code sur le serveur avec:

C#

    public static string Compress(string s)
    {
        var dict = new Dictionary<string, int>();
        char[] data = s.ToArray();
        var output = new List<char>();
        char currChar;
        string phrase = data[0].ToString();
        int code = 256;

        for (var i = 1; i < data.Length; i++){
            currChar = data[i];
            var temp = phrase + currChar;
            if (dict.ContainsKey(temp))                
                phrase += currChar;                
            else
            {
                if (phrase.Length > 1)                    
                    output.Add((char)dict[phrase]);                    
                else                    
                    output.Add((char)phrase[0]);                    
                dict[phrase + currChar] = code;
                code++;
                phrase = currChar.ToString();
            }
        }

        if (phrase.Length > 1)            
            output.Add((char)dict[phrase]);            
        else            
            output.Add((char)phrase[0]);

        return new string(output.ToArray());
    }

et sur le navigateur, vous pouvez le décompresser avec:

javascript

//Decompress an LZW-encoded string
function lzw_decode(s) {
    var dict = {};
    var data = (s + "").split("");
    var currChar = data[0];
    var oldPhrase = currChar;
    var out = [currChar];
    var code = 256;
    var phrase;
    for (var i = 1; i < data.length; i++) {
        var currCode = data[i].charCodeAt(0);
        if (currCode < 256) {
            phrase = data[i];
        }
        else {
            phrase = dict[currCode] ? dict[currCode] : (oldPhrase + currChar);
        }
        out.push(phrase);
        currChar = phrase.charAt(0);
        dict[code] = oldPhrase + currChar;
        code++;
        oldPhrase = phrase;
    }
    return out.join("");
} 
L'approche la plus simple pour compresser au format JSON (et les autres) la réponse est de s'assurer que votre serveur web utilise le protocole HTTP compression. en.wikipedia.org/wiki/HTTP_compression Le lien auquel vous faites référence dans votre question parle de la compression des données en JavaScript afin qu'il occupe moins d'espace de stockage lorsqu'il est stocké sur le serveur.
Ouais, c'est probablement une solution plus élégante. Je vais l'essayer, merci!
J'ai changé la question pour correspondre à votre problème actuel. Hésitez pas à revenir ou à éditer.
Grâce sonne beaucoup mieux maintenant!

OriginalL'auteur Tono Nam | 2013-10-23