2010-09-24 9 views
0

J'ai un objet JSON avec une fonction:Convertir un objet json en chaîne json et utiliser ses fonctions?

var thread = { 
    title: "my title", 
    delete: function() { 
     alert("deleted"); 
    } 
}; 

thread.delete(); // alerted "deleted" 

thread_json = JSON.encode(thread); // convert to json from object 

thread_object = JSON.decode(thread_json); // convert to object from json 

thread_object.delete(); // this didn't work 

Après rétroconvertis de chaîne JSON à l'objet, je ne pouvais pas utiliser la fonction delete().

Lorsque vous convertissez quelque chose en JSON, les fonctions ont disparu?

Y at-il des moyens de les conserver dans la chaîne JSON? J'utilise Mootools.

+1

Ce n'est pas un 'objet json'. Il n'y a pas d'objet JSON. JSON est un format de texte ... texte pour représenter des objets. Non, les représentations d'objet JSON n'incluent pas les fonctions ... le mieux que vous puissiez faire est d'inclure le corps de la fonction en tant que texte et de créer une fonction via 'Function' après avoir analysé la chaîne JSON. –

+1

JSON ne conserve pas les fonctions. –

+2

Par définition, JSON (le format) ** ne doit pas conserver les fonctions **. Voici la spécification officielle: http://json.org – slebetman

Répondre

2

Vous l'avez. Jetez un oeil à cette sortie JSON.encode. Seuls les types de données simples sont autorisés dans les représentations JSON, en partie pour faciliter la création et en partie pour la sécurité. (La raison pour laquelle nous utilisons quelque chose comme JSON.decode au lieu de eval est la possibilité de fonctions d'encastrement.)

Vous devez modifier le code source bibliothèque JSON pour accepter des fonctions, ou écrivez votre propre afin de préserver la définition littérale l'objet lors de la conversion en chaîne.

Considérons, cependant, la possibilité que vous n'avez pas vraiment besoin de faire cela. Il y a probablement une meilleure solution, mais je ne peux pas commencer à régler cela sans connaître votre situation exacte.

+0

Aussi, une fois que votre encodage fonctionne dans votre chaîne sérialisée, alors par définition ce n'est plus une chaîne JSON (pour être plus précis, c'est une chaîne JSON invalide). – slebetman