Je me demandais comment créer un objet JSON (JS), puis le cloner.
Comment créer un objet JSON en javascript/jquery?
Il n'y a rien de tel qu'un objet JSON object. JSON signifie JavaScript Object Notation et est essentiellement une chaîne qui code des informations similaires aux littéraux d'objets de JavaScript.
Vous pouvez cependant créer un tel encodage (qui entraînerait un string) avec JSON.stringify(object)
, voir JSON en JavaScript . Vous pouvez également créer une telle chaîne manuellement, mais elle est très sujette aux erreurs et je ne le recommande pas.
Comment cloner un objet JSON en javascript/jquery?
Comme c'est juste une ficelle:
var jsonString2 = jsonString;
Je ne peux plus travailler avec des tableaux javascript
JSON est un format pour exchange data, ce n'est pas une structure de données que vous pouvez utiliser dans une application.
Peut-être voudrez-vous en savoir plus sur JSON , objects dans JS et arrays dans JS.
C'est ce que je fais et ça marche à merveille
if (typeof JSON.clone !== "function") {
JSON.clone = function(obj) {
return JSON.parse(JSON.stringify(obj));
};
}
Il suffit de faire
var x = {} //some json object here
var y = JSON.parse(JSON.stringify(x)); //new json object here
À partir de ES6. Object.assign est un bon moyen de le faire.
newjsonobj = Object.assign({}, jsonobj, {})
Les éléments du premier argument mutent l'objet existant et le troisième argument modifie le nouvel objet renvoyé.
Dans ES7, il est proposé d’utiliser l’opérateur de propagation.
newjsonobj = {...jsonobj}
C'est un problème que j'ai souvent rencontré lors de l'analyse de JSON et de sa réutilisation à plusieurs reprises dans le code. Et vous voulez éviter de ré-analyser chaque fois la chaîne JSON d'origine ou d'utiliser la méthode serialize/parse
, qui est la méthode la moins efficace.
Par conséquent, dans les cas où vous souhaitez ajuster l'objet analysé tout en conservant l'original, utilisez la fonction suivante dans le code javascript du serveur ( NodeJs ) ou du client. La fonction jQuery clone
est moins efficace car elle traite les cas des fonctions, regexp, etc. La fonction ci-dessous traite uniquement les types pris en charge par JSON (null, indéfini, nombre, chaîne, tableau et objet):
function cloneJSON(obj) {
// basic type deep copy
if (obj === null || obj === undefined || typeof obj !== 'object') {
return obj
}
// array deep copy
if (obj instanceof Array) {
var cloneA = [];
for (var i = 0; i < obj.length; ++i) {
cloneA[i] = cloneJSON(obj[i]);
}
return cloneA;
}
// object deep copy
var cloneO = {};
for (var i in obj) {
cloneO[i] = cloneJSON(obj[i]);
}
return cloneO;
}
Q1: Comment créer un objet JSON en javascript/jquery?
Créer un objet Javascript est si simple:
var user = {}; // creates an empty user object
var user = {firstName:"John", lastName:"Doe"}; // creates a user by initializing
// its firstName and lastName properties.
Après la création, vous pouvez ajouter des champs supplémentaires à votre objet, tels que user.age = 30;
.
Si vous avez l'objet en tant que chaîne JSON, vous pouvez le convertir en objet JSON à l'aide de la fonction JSON.parse(yourJsonString)
intégrée ou de la fonction $.parseJSON(yourJsonString)
de jQuery.
Q2: Comment cloner un objet JSON en javascript/jquery?
Ma façon de cloner des objets JSON est extend function of jQuery. Par exemple, vous pouvez générer un clone de votre objet utilisateur comme ci-dessous:
var cloneUser = $.extend(true, {}, {firstName:"John", lastName:"Doe"});
Le premier paramètre indique si l'objet clone sera une copie superficielle ou profonde de l'original (voir Copie d'objet sur le wiki).
Pour voir d'autres alternatives de clonage JSON, vous pouvez lire this article.
Supposons, .__ Nous avons un JSONOBJECT EmailData qui contient des données. Maintenant, si vous voulez les mêmes données dans un autre objet (c'est-à-dire cloner les données), vous pouvez faire quelque chose comme ceci:
JSONOBJECT clone_EmailData=new JSONOBJECT(EmailData.toString());
L'instruction ci-dessus vous donnera un nouvel objet avec les mêmes données et le nouvel objet ne fait pas référence à l'objet EmailData.