web-dev-qa-db-fra.com

jQuery json à chaîne?

Au lieu de partir d'une chaîne json et d'utiliser $ .parseJSON, je dois prendre mon objet et le stocker dans une variable sous forme de chaîne représentant Json.

(Une bibliothèque avec laquelle je traite attend un type JSON malformé, donc je dois le manipuler pour le faire fonctionner.)

Quelle est la meilleure façon de faire cela?

79
Incognito

Edit: Vous devriez utiliser la bibliothèque json2.js de Douglas Crockford au lieu d'implémenter le code ci-dessous. Il fournit des fonctionnalités supplémentaires et un meilleur/ancien support du navigateur. 

Récupérez le fichier json2.js à partir de: https://github.com/douglascrockford/JSON-js


// implement JSON.stringify serialization
JSON.stringify = JSON.stringify || function (obj) {
    var t = typeof (obj);
    if (t != "object" || obj === null) {
        // simple data type
        if (t == "string") obj = '"'+obj+'"';
        return String(obj);
    }
    else {
        // recurse array or object
        var n, v, json = [], arr = (obj && obj.constructor == Array);
        for (n in obj) {
            v = obj[n]; t = typeof(v);
            if (t == "string") v = '"'+v+'"';
            else if (t == "object" && v !== null) v = JSON.stringify(v);
            json.Push((arr ? "" : '"' + n + '":') + String(v));
        }
        return (arr ? "[" : "{") + String(json) + (arr ? "]" : "}");
    }
};

var tmp = {one: 1, two: "2"};
JSON.stringify(tmp); // '{"one":1,"two":"2"}'

Code de: http://www.sitepoint.com/blogs/2009/08/19/javascript-json-serialization/

84
Inigoesdr

J'utilise

$.param(jsonObj)

ce qui me donne la ficelle.

38
jonathan

La plupart des navigateurs ont un objet natif JSON de nos jours, qui inclut les méthodes parse et stringify. Donc, essayez simplement JSON.stringify({}) et voyez si vous obtenez "{}". Vous pouvez même passer des paramètres pour filtrer les clés ou pour faire une jolie impression, par exemple. JSON.stringify({a:1,b:2}, null, 2) met une nouvelle ligne et 2 espaces devant chaque touche.

JSON.stringify({a:1,b:2}, null, 2)

donne

"{\n  \"a\": 1,\n  \"b\": 2\n}"

qui imprime comme

{
  "a": 1,
  "b": 2
}

En ce qui concerne la partie décoiffante de votre question, utilisez le deuxième paramètre. De http://www.javascriptkit.com/jsref/json.shtml :

Le paramètre replacer peut être une fonction ou un tableau de Chaîne/Nombres. Il passe en revue chaque membre de l'objet JSON vers vous permettent de décider quelle valeur chaque membre doit être changé. Comme un fonction il peut retourner:

  • Un nombre, une chaîne ou une valeur booléenne qui remplace la valeur d'origine de la propriété par celle renvoyée.
  • Un objet, qui est sérialisé puis renvoyé. Les méthodes ou fonctions d'objet ne sont pas autorisées et sont supprimées. 
  • Null, ce qui entraîne la suppression de la propriété.

En tant que tableau, les valeurs définies à l'intérieur correspondent aux noms de les propriétés à l'intérieur de l'objet JSON qui doivent être conservées lorsque converti en objet JSON.

35
AlexChaffee

Le meilleur moyen que j'ai trouvé est d'utiliser jQuery JSON

10
David Reynolds

Vous pouvez analyser le JSON en un objet, puis créer votre JSON mal formé à partir de l’objet ajavscript. Cela peut ne pas être le meilleur en termes de performance, tho.

Sinon, si vous devez seulement apporter de très petites modifications à la chaîne, traitez-la simplement comme une chaîne et modifiez-la à l'aide de javascript standard.

0
cofiem