J'ai le tableau / objet JS suivant J'utilise json2.js et j'essaie de sérialiser x dans une chaîne.
Et tout ce que je reçois est le tableau:
[1,2,3,4] p> est-ce correct?
Puisque je peux ajouter n'importe quelle propriété à un tableau Pourquoi JSON2 ne gère pas cela?
Qu'est-ce que je manque? p> p>
4 Réponses :
Qu'est-ce que vous attendiez-vous? :) Je ne suis pas sûr de ce que vous essayez de faire.
p> L'objet Array a une propriété appelée Ce que vous voulez faire est quelque chose comme ceci: p> Vous avez maintenant un objet appelé edit forte> p> Ceci est en réponse à vos commentaires. Bien qu'il soit vrai que les matrices peuvent être enrichies de propriétés, réfléchissez à ce que cela signifie lorsque vous devez sérialiser cet objet. Que voulez-vous voir exactement lorsque vous serialisez mais ce que vous avez maintenant n'est plus un tableau. En outre, l'objet Array lui-même a un tas de propriétés natales. Comment un sérialiseur JSON devrait-il gérer ceux-ci? P> Je pense que vous mélangez un tableau en tant qu'objet et un tableau comme littéral. Un tableau comme littéral est juste Le sérialisateur JSON concerne la valeur de l'objet. Si Si vous souhaitez sérialiser ces propriétés supplémentaires, vous devrez écrire votre propre sérieliseur qui ira itération sur les propriétés du tableau et Représenter tout dans une carte / une matrice associative. C'est le seul moyen; La mise en garde, comme je l'ai déjà mentionnée, est que vous n'avez plus de matrice réelle. p> p> x code> est une matrice et tout ce que vous avez fait lorsque vous avez fait
x.name code>, vous définissez simplement une propriété appelée
Nom code> pour l'objet Array. Le nom code> nom code> n'est pas ajouté à la matrice. Vous pouvez voir cela en Firebug: P>
nom code>, mais la valeur de cette propriété n'est pas ajoutée à la matrice elle-même. P>
x code> qui a deux propriétés. La propriété CODE> TRAY CODE> fait référence à une matrice, et la propriété
nom code> fait référence au nom.
x.array code> vous donnera la matrice, et
x.name code> vous donnera le nom. p>
x code>? Si
x code> est déjà le tableau
[1, 2, 3, 4] code>, comment le représenteriez-vous dans JSON? Vous pouvez le représenter comme suit: p>
[1, 2, 3, 4] code>. Maintenant, la matrice en tant que objet présente probablement des biens qui indiquent la valeur réelle de la matrice. Il a également d'autres propriétés (comme
longueur code>) et des méthodes qui y agissent (comme
tranche code>). P>
x code> est une matrice, la chose qui doit être sérialisée est la valeur de
x code>, qui est
[1, 2, 3, 4] code >. Les propriétés de
x code> sont totalement différentes. P>
AVERTISSEMENT DE PONDANCE: C'est juste un objet. L'objet littéral est le moyen par lequel vous avez créé.
@Tim va réparer. Désolé, mes termes ont mélangé!
La matrice peut être enrichie de propriétés. Dans certaines situations, c'est très bénéfique. Il n'y a aucun point ici pour dire les situations. Disons qu'ils ne sont pas la norme. Néanmoins, je me rends compte que les tableaux enrichis ne sont pas JSON, qui, à mon avis, est une honte.
x = {tableau: [1,2,3,4], nom = "test"} est complètement différent de x = [1,2,3,4]; x.name = 'Test'; Alors pourquoi insister?
Le problème est que JSON2 croit toujours que c'est un tableau depuis Le problème avec cette solution est qu'aucune des méthodes de réseau ne sera disponible sur l'objet. Donc, si vous avez besoin d'utiliser POP, poussez, etc., vous devrez le convertir en un réseau réel avec instance de graphique de x code> renvoie true. Pour le réparer, vous pouvez créer le "tableau" de manière rond-point:
array.pototype.slice.call (x); code> ou si vous êtes Ayte faim
[]. Slice.call (x); code>. p> p>
Je ne sais pas pourquoi vous le feriez, mais un pour une boucle pour obtenir tout produit: p> mais json2 code ne le verra pas de cette façon, pourquoi ne pas la convertir à un objet? p> p>
Parce que le tableau enrichi est transmis à moi et je dois le persister. Je suppose que je pourrais le convertir avant de le persister et quand je les désériorialiser.
Imaginons que nous sortons avec quelque chose comme: p> si ce qui précède était valide JavaScript pour créer un tableau et coller deux propriétés alors ce serait génial et nous pourrions JSON -ce.
Il serait équivalent de faire ceci: p> mais ce n'est pas et c'est la raison pour laquelle nous ne pouvons pas persister dans JSON. P> ol>
Qu'est-ce que B> B> vous essayez de faire?
Vous ne pouvez pas ajouter de propriété à un tableau. Les tableaux sont des cartes d'indices numériques aux valeurs. Techniquement, dans JavaScript, vous pouvez ajouter n'importe quelle propriété à un objet code> ou à un objet code> car ils sont construits sur le type code> objet code>, bien que vous n'êtes pas vraiment censé. Quelle est votre intention?
Pourquoi surcharger le tableau? juste faire
var x = {}; x.array = [1,2,3,4]; x.name = "myarray"; code> ou le faire JSON pour commencer avec:
var x = {"nom": "myarray", "tableau": [1,2,3,4]} code>
Vous pouvez ajouter n'importe quelle propriété nommée à un tableau. C'est juste qu'il n'y a pas de syntaxe d'initialisation dans JS pour créer un tableau avec de telles propriétés nommées, et JSON n'est que la syntaxe d'initialisation de JS.