Javascript convertit une Chaîne en Tableau d'Objets
J'ai une Application NodeJS qui accepte une chaîne de caractères (téléchargé entrée!) J'ai Aucun Contrôle - dessus de l'entrée, je ne suis que la construction d'un Service REST pour Processus les données.
Cette chaîne est signifiait être un Tableau de Objets JSON que je peux ensuite faire une boucle pour extraire chaque élément ...
Je suis réception la suite (comme une chaîne de caractères):
[
{Name: 'Jane',
Id: '005b0000000MGa7AAG'},
{Name: 'Tom',
Id: '005b0000000MGa7AAF'}
]
Quand j'essaie de JSON.analyser cela je reçois
SyntaxError: Unexpected token N
À juste titre, parce que je savoir c'est Invalid JSON
alors que Ce chaîne suivante est JSON valide et passe http://jsonlint.com/:
[
{"Name": "Jack",
"Id": "005b0000000MGa7AAA"},
{"Name": "Jill",
"Id": "005b0000000MGa7AAB"}
]
Ma question est: Comment puis-je accepter la première d'entrée et de l'analyser afin de permettre:
parsed[0]['Name'] == 'Jane'
>> true
Mon premier instinct est de la chaîne de remplacer les clés (par ex. le Nom de "Nom") et ensuite d'essayer d'analyser. Mais si quelqu'un a une solution, je lui en serais reconnaissant.
le premier n'est pas dans le format json
Salut @ExplosionPills j'aurais du précisé que son un web-service qui accepte de JSON. Le téléchargement de la chaîne n'est pas la main-tapé par l'utilisateur au lieu de cela, il est généré par une Application JAVA (en dehors de mon contrôle) et envoyé à mon NodeJS application pour le traitement. Ils sont à m'envoyer inValid JSON... 🙁
OriginalL'auteur nelsonic | 2013-04-25
Vous devez vous connecter pour publier un commentaire.
Vous pouvez le faire avec un peu de Regex pour remplacer:
Tout d'abord, nous envelopper les propriétés des noms avec des guillemets, puis on remplace les guillemets simples avec des guillemets. C'est assez pour le rendre JSON valide qui peut ensuite être analysé.
Voici un exemple de travail
NOTE: en Utilisant les RegEx en général pour ce genre de choses n'est pas l'idéal, et cette solution ne fonctionnera que dans des circonstances particulières (comme dans cet exemple). Comme mentionné dans les commentaires, pourrait être un problème si les valeurs de données contenait un colon
:
Avec cela à l'esprit, c'est une solution fiable:
Cela correspond à aucune des variables (alphanumérique) qui se terminent par un point
:
, mais ingore toutes les correspondances que l'on trouve entre guillemets (c'est à dire des données de la chaîne de valeurs)Voici un exemple
Non, bien sûr que non, ne sois pas idiot! mais oui, c'est certainement feuilletée, mais si ces hypothèses peuvent être faites sur les données JSON puis il fera beau.
Il fixe!
merci pour votre prompte et complète réponse! Certains noms de champ ont des traits de soulignement. par Défaut__c (Salesforce Champs Personnalisés!) mais les regex ne les aime pas. J'ai besoin de permettre pour les "_c" ou "" dans les noms de champ. Pensées?
d'accord. les données sont trop compliquées. J'ai essayé de formuler la question de façon simple. mais compte tenu de l'Url et de données contenant des apostrophes et les deux-points, etc. Je me suis forcé à être plus créatif. Merci beaucoup pour votre réponse je vais voter!
OriginalL'auteur musefan
Créer une classe javascript, remplir l'objet avec votre entrée et ensuite de les convertir dans un propre json à l'aide de:
JSON.stringify(object)
pour éviter les erreurs . Mon post complet ici .REMARQUE: si vous utilisez la version IE7 ou moins la version que vous devez ajouter le
JSON.js
bibliothèque à utiliserJSON.stringify()
fonction.JSON.stringify
.j'ai oublier de spécifier la version 😛
C'est le chemin à parcourir. Dans le client stringify l'objet JSON.stringify(). Le serveur va recevoir un json valide.
Mon question a rien pour I. E ou la conversion de chaînes sur la Côté Client. J'ai essayé de préciser, dans le question que j'ai pas de contrôle sur le . Je suis recevoir les données comme un string donc, JSON.stringify(string) est inutile pour moi... 🙁
Vous avez vu mon entrée de blog? JSON.stringify est la dernière étape de la solution, la clé de la solution proposée est de créer une classe javascript ( pourrait-il être un objet complexe avec de nombreux niveaux ) et ensuite créer une instance de cette classe et de le remplir avec les données obtenues lors de l'entrée (vos données chaîne de caractères). Lorsque vous avez votre objet de prêt et remplie, vous pouvez utiliser JSON.stringify pour générer votre propre JSON dans un javascrit objet (Construit à l'aide d'une classe javascript) 🙂
OriginalL'auteur Maximiliano Becerra