2010-12-14 60 views
1

Lorsque vous utilisez JSON.stringify dans Google Chrome, il semble que toJSON n'est pas appelé? J'utilise json2.js comme back-up pour les navigateurs qui ne le supportent pas. Je suppose que depuis Chrome prend en charge JSON mais pas JSON json2.js n'est pas utilisé du tout?Est-ce que toJSON est pris en charge dans Google Chrome?

Mise à jour
Voici un exemple: http://jsfiddle.net/GZzvZ/

Firefox: { "foo": "foo", "bar": "bar"}
Chrome: { "bar": "bar" }

+0

Veuillez soumettre votre code afin que nous puissions identifier la cause de l'erreur. – haylem

+0

Ajout d'un exemple. Maintenant, je doute que j'utilise correctement JSON. – Pickels

+0

a modifié ma réponse. – haylem

Répondre

4
var t = {}; 

t.toJSON = function() { alert('meuh'); return (''); } 
JSON.stringify(t) 

Fonctionne parfaitement bien pour moi. Il alerte, il appelle donc la méthode toJSON de manière appropriée (dans Chrome 8).

EDIT:

C'est normal. Votre Foo est une fonction, et les objets de fonction ne sont pas autorisés dans JSON. Firefox est juste en train de pardonner, je suppose.

Eh bien, en fait, je me demande, je ne trouve pas de réponse claire dans la norme. Considérant que vous fournissez un toJSON() pour fournir votre propre sérialisation, devrait-il être autorisé ou non. Mais de toute façon, c'est la raison de votre échec.

Si vous éditez votre exemple jsFiddle comme ceci, le toJSON est appelé en conséquence sur foo.

var obj = function(){ 
    this.foo = 'test'; // OK 
    //this.foo = function(){ }; KO 
    this.foo.toJSON = function(){ 
     return 'foo'; 
    }; 

    this.bar = 'bar'; 
} 

var ins = new obj(); 
var json = JSON.stringify(ins); 
document.write(json);