143 votes

Comment échapper à la chaîne JSON?

Existe-t-il des classes / fonctions disponibles pour une évasion JSON facile? Je préférerais ne pas avoir à écrire le mien.

40voto

Darthenius Points 1828

Bâtiment sur la réponse par Dejan, ce que vous pouvez faire est d'importer System.Web.Helpers .NET Framework assemblée, puis utiliser la fonction suivante:

static string EscapeForJson(string s) {
  string quoted = System.Web.Helpers.Json.Encode(s)
  return quoted.Substring(1, quoted.Length - 2);
}

L' Substring appel est nécessaire, puisqu' Encode automatiquement entoure les chaînes entre guillemets.

35voto

Clive Paterson Points 151

Oui, ajoutez simplement la fonction suivante à votre classe Utils ou à quelque chose comme ça:

     public static string cleanForJSON(string s)
    {
        if (s == null || s.Length == 0) {
            return "";
        }

        char         c = '\0';
        int          i;
        int          len = s.Length;
        StringBuilder sb = new StringBuilder(len + 4);
        String       t;

        for (i = 0; i < len; i += 1) {
            c = s[i];
            switch (c) {
                case '\\':
                case '"':
                    sb.Append('\\');
                    sb.Append(c);
                    break;
                case '/':
                    sb.Append('\\');
                    sb.Append(c);
                    break;
                case '\b':
                    sb.Append("\\b");
                    break;
                case '\t':
                    sb.Append("\\t");
                    break;
                case '\n':
                    sb.Append("\\n");
                    break;
                case '\f':
                    sb.Append("\\f");
                    break;
                case '\r':
                    sb.Append("\\r");
                    break;
                default:
                    if (c < ' ') {
                        t = "000" + String.Format("X", c);
                        sb.Append("\\u" + t.Substring(t.Length - 4));
                    } else {
                        sb.Append(c);
                    }
                    break;
            }
        }
        return sb.ToString();
    }
 

15voto

AmitKB Points 490

J'ai utilisé le code suivant pour échapper à la valeur de chaîne pour JSON. Vous devez ajouter votre '"' à la sortie du code suivant:

 public static string EscapeStringValue(string value)
{
    const char BACK_SLASH = '\\';
    const char SLASH = '/';
    const char DBL_QUOTE = '"';

    var output = new StringBuilder(value.Length);
    foreach (char c in value)
    {
        switch (c)
        {
            case SLASH:
                output.AppendFormat("{0}{1}", BACK_SLASH, SLASH);
                break;

            case BACK_SLASH:
                output.AppendFormat("{0}{0}", BACK_SLASH);
                break;

            case DBL_QUOTE:
                output.AppendFormat("{0}{1}",BACK_SLASH,DBL_QUOTE);
                break;

            default:
                output.Append(c);
                break;
        }
    }

    return output.ToString();
}
 

7voto

womp Points 71924

Vous souhaiterez peut-être consulter Une introduction à JSON dans .Net sur MSDN et la classe JsonConvert de JayRock JSON .

En guise de remarque, nous utilisons Jayrock pour tous nos objectifs Json pour nos produits.

4voto

Kevin Hakanson Points 15498

Je vous recommanderais également d'utiliser la bibliothèque JSON.NET mentionnée, mais si vous devez échapper des caractères unicode (par exemple, le format \ uXXXX) dans la chaîne JSON résultante, vous devrez peut-être le faire vous-même. Jetez un coup d'œil à la conversion de chaînes Unicode en chaînes ascii échappées, par exemple.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X