Comment sérialiser et désérialiser des objets Javascript?
J'ai besoin de sérialiser et désérialiser des objets Javascript pour les stocker dans une base de données.
Noter que ces objets contiennent des fonctions, donc je ne peux pas les stocker sous forme de JSON, donc je ne peux pas l'utiliser json2.js.
Quel est l'état de l'art dans [de]la sérialisation des objets javascript (en javascript bien sûr).
Grâce,
Stewart
- Pourquoi ne pouvez-vous pas utiliser JSON?
- Si un objet javascript contient des fonctions (c'est à dire: méthodes), alors il n'y a aucune façon de coder ceux en JSON. JSON ne s'occupe que des objets JS pur de données (tables de hachage, les tableaux & types primitifs).
- Plus précisément: j'ai besoin de stocker une DirectionsResult objet à partir de Google Maps Javascript API. Le DirectionsResult contient LatLng les objets qui ont des fonctions qui ne sont pas gérées par JSON: code.google.com/apis/maps/documentation/javascript/...
- ne pouvons-nous pas stocker des objets de fonction en tant que chaîne json ??
Vous devez vous connecter pour publier un commentaire.
En général, il n'y a aucun moyen (dans un navigateur) afin de sérialiser des objets avec des fonctions qui y sont attachées, puisque chaque fonction dispose d'une référence externe de portée. Si la fonction fait référence à une de ces variables, ils n'existera plus lorsque vous désérialiser.
Ce que je voudrais c'est d'utiliser le construit (ou json2.js)
JSON.stringify
etJSON.parse
fonctions avec lereplacer
etreviver
paramètres. Voici partielle d'un exemple de la façon dont il devrait fonctionner:Vous pouvez utiliser n'importe quel format de sérialisation que vous voulez dans votre types personnalisés. Le "LatLng(latitude,longitude)" le format est juste une façon de le faire. Vous pouvez même retourner un objet javascript qui peut être sérialisé en JSON natif.
LatLng
constructeur ajouter les fonctions de retour pour vous. La poudre va travailler sur les fonctions, si vous le voulez vraiment, vous pouvez essayer de conversion la fonction d'une chaîne de caractères. Juste être conscient que cela ne fonctionnera pas dans tous les cas.Vous ne voulez pas sérialiser logique comme des fonctions.
Si vous devez mettre à jour votre logique /js fonctions à l'avenir, vous n'avez pas (toujours) veulent que l'ancienne logique pour être chargé avec les données impérativement. Méfiez-vous.
utilisation gserializer:
http://www.onegeek.com.au/articles/programming/javascript-serialization.php
le code dans google :
http://code.google.com/p/gserializer/
Si vous utilisez ES6 versions de Nœud, vous pouvez consulter un petit paquet que j'ai écrit appelé JSOFF. C'est l'Objet JavaScript de la Fonction Format; une baisse-dans le remplacement pour JSON qui gère les fonctions.
C'est super petit et simple, de sorte que Babeljs ou Browserify peut-être vos amis.
Installer via:
npm install jsoff
ouyarn add jsoff
.Voici l'exemple comment créer un objet avec les fonctions:
Sur Node.js, il y a aussi le JASON paquet.
Voici l'exemple:
Installer le paquet par:
npm install JASON
.Je n'aurais pas sérialiser JS fonctions pour des raisons de sécurité. Grâce à une API publique toutes sortes de choses désagréables pourrait être envoyé à la base de données. Comme pour deserialisation j'ai une approche différente. Je suis modèle de mélange des objets définis sur le côté client avec les données provenant de JSON. J'ai un petit outil pour le faire, prendre un coup d'oeil sur GitHub à khayll/jsonmix.
Il devrait ressembler à quelque chose: