2010-11-08 6 views
18

Je me demandais comment créer un objet JSON (JS), puis le cloner.Comment créer et cloner un objet JSON?

+1

Pourquoi * "ne peut plus travailler avec javascript array" *? JSON est juste la syntaxe littérale de tableau et d'objet de Javascript. Si vous aimez la syntaxe JSON, vous devriez vous sentir comme chez vous lorsque vous utilisez des tableaux et des objets dans Javascipt. –

+0

Prenez le temps de lire cet article: [Il n'y a pas d'objet "JSON"] (http://benalman.com/news/2010/03/theres-no-such-thing-as-a-json/ – PetersenDidIt

Répondre

7

Comment créer un objet JSON dans javascript/jquery?

Il n'y a rien comme un objet JSON . JSON signifie JavaScript Object Notation et est fondamentalement une chaîne qui code des informations similaires aux littéraux d'objet de JavaScript.

Vous pouvez cependant créer un tel encodage (qui entraînerait une chaîne ) avec JSON.stringify(object), voir JSON in JavaScript. Vous pouvez également créer une telle chaîne manuellement, mais elle est très sujette aux erreurs et je ne la recommande pas.

Comment cloner un objet JSON dans javascript/jquery?

Comme il est juste une chaîne:

var jsonString2 = jsonString; 

Je ne peux pas plus travailler avec des tableaux javascript

JSON est un format d'échange données, il est une structure de données que vous pouvez utiliser dans une application.


Peut-être que vous voulez en savoir plus sur JSON, objects à JS et arrays à JS.

+2

La deuxième réponse n'est pas vraie. L'opérateur "=" ne clone aucun objet mais transmet la référence. – Reinhard

+0

@Reinhard: Je n'ai jamais prétendu que c'était le cas. ** JSON ** dans JS n'existe que sous forme de ** chaîne **. Et puisque les chaînes sont immuables, cloner une chaîne est aussi simple que de l'assigner à une variable différente. Bien que je suis d'accord avec le recul, le PO peut avoir parlé d'objets JavaScript. –

+1

@FelixKling: Il s'agit alors d'une réponse à une question invalide. Il s'ensuit que ce n'est pas une réponse. Je pense qu'il serait préférable de supprimer cette ligne pour ne pas confondre lecteur par lecteur et répandre la sagesse. –

4

C'est un problème que j'ai souvent rencontré lors de l'analyse de JSON et de sa réutilisation plusieurs fois dans le code. Et vous voulez éviter de ré-analyser chaque fois à partir de la chaîne JSON d'origine, ou d'aller de la manière serialize/parse qui est le moyen le moins efficace. Par conséquent, dans les cas où vous souhaitez ajuster l'objet analysé tout en conservant l'original inchangé, utilisez la fonction suivante sur le serveur (NodeJs) ou sur le code javascript du client. La fonction jQuery clone est moins efficace, car ils traitent les cas pour les fonctions, etc., regexp La fonction ci-dessous, ne traite les types pris en charge JSON (null, non dé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; 
} 
19

C'est ce que je fais et il fonctionne comme un charme

if (typeof JSON.clone !== "function") { 
    JSON.clone = function(obj) { 
     return JSON.parse(JSON.stringify(obj)); 
    }; 
} 
+0

Est-ce que cela fonctionne également pour Gobliins

4

Q1: Comment créer un objet JSON en javascript/jquery?

Création d'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 comme 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 dans javascript/jquery?

Ma façon de cloner des objets JSON est extend fonction de 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 peu profonde ou profonde de l'original (voir Object copy sur le wiki).

Pour voir d'autres alternatives de clonage JSON, vous pouvez lire l'article this.

+0

'JSON.parse' renvoie un' Object' (voir: [MDN] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Return_value)), pas un "Objet JSON", qui AFAIK n'existe pas. (Ceci n'est pas un problème, mais c'est un point de confusion pour de nombreux débutants, donc il peut être bon de le corriger) – StubbornShowaGuy

12

Il suffit de faire

var x = {} //some json object here 
var y = JSON.parse(JSON.stringify(x)); //new json object here 
5

Au ES6. Object.assign est un bon moyen de le faire.

newjsonobj = Object.assign({}, jsonobj, {}) 

Les éléments du premier argument muter l'objet existant, et le troisième argument des changements dans le nouvel objet retourné.

Dans ES7, il est proposé d'utiliser l'opérateur de répartition.

newjsonobj = {...jsonobj} 
+2

Cela crée un clone peu profond: Toute modification des valeurs dans le premier objet JSON affectera le clone (et vice versa), si ces valeurs sont quelque chose de mutable comme des objets ou des tableaux. par exemple. 'var a = {arr: [1,2,3]}; var b = Object.assign ({}, a, {}); b.arr [0] = 4; console.log (a.arr); 'imprime' [4, 2, 3] 'au lieu de' [1, 2, 3] 'comme prévu. – thenickdude