Comment vérifier si JavaScript objet JSON
J'ai un imbriquée objet JSON que j'ai besoin de boucle, et la valeur de chaque clé peut être une Chaîne de caractères, tableau JSON ou un autre objet JSON. Selon le type d'objet, j'ai besoin de réaliser différentes opérations. Est-il possible que je puisse vérifier le type de l'objet pour voir si c'est une Chaîne, objet JSON ou tableau JSON?
J'ai essayé d'utiliser typeof
et instanceof
mais les deux n'ont pas l'air de fonctionner, comme typeof
retourne un objet à la fois d'objet JSON et le tableau, et instanceof
donne une erreur quand je fais obj instanceof JSON
.
Pour être plus précis, après l'analyse du JSON dans un JS objet, est-il possible que je puisse vérifier si il est normal de chaîne ou un objet avec des clés et des valeurs (à partir d'un objet JSON), ou un tableau (à partir d'un tableau JSON)?
Par exemple:
JSON
var data = "{'hi':
{'hello':
['hi1','hi2']
},
'hey':'words'
}";
Exemple De Code JavaScript
var jsonObj = JSON.parse(data);
var path = ["hi","hello"];
function check(jsonObj, path) {
var parent = jsonObj;
for (var i = 0; i < path.length-1; i++) {
var key = path[i];
if (parent != undefined) {
parent = parent[key];
}
}
if (parent != undefined) {
var endLength = path.length - 1;
var child = parent[path[endLength]];
//if child is a string, add some text
//if child is an object, edit the key/value
//if child is an array, add a new element
//if child does not exist, add a new key/value
}
}
Comment puis-je réaliser l'objet de la vérification, comme indiqué ci-dessus?
- JSON c'est juste une notation stockées sous forme de chaîne. Êtes-vous sûr que vous êtes de ne pas confondre les termes?
- Nope, j'ai mis à jour la question pour la rendre plus claire. Je suppose que ma question principale est de savoir ce qui se passe après, nous faisons un
.parse()
sur une chaîne JSON, et comment l'identifier? - le changement n'a pas fait ça plus clair (à lea pour moi). Que faire si vous donner l'exemple de JSON que vous avez à traiter avec des
- Mise à jour de la question avec un exemple. (:
- La vraie question est: pourquoi s'en faire?
- Vous ne pouvez pas savoir si "niveau1 était autrefois un objet JSON". Vous ne pouvez pas le savoir c'est un objet maintenant.
- Parce que fondée sur ce qu'il était à l'origine, j'ai besoin de réaliser différentes opérations.
- Votre parler de ce que l'objet a été anciennement me confond. Avant de vous analysé les données, jsonObj.niveau1 n'existait pas. Après avoir analysé c'est un objet.
- Ok, il semble que ma question est encore confuse. J'ai édité de nouveau la question. Espérons que cela aide.
- Le whatIsIt méthode que j'ai proposé ci-dessous devraient travailler bien pour vous.
Vous devez vous connecter pour publier un commentaire.
Je voudrais vérifier le constructeur attribut.
par exemple
Edit: Ajout d'un nul et un indéfini vérifier.
else if
est inutile{}.constructor
est à l'origine de me rendreERROR TypeError: Cannot read property 'constructor' of undefined
dans mon angulaire de l'application.Vous pouvez utiliser Tableau.isArray à vérifier pour les tableaux. Puis typeof obj == 'string', et typeof obj == 'object'.
typeof null === 'object'
[{ "name":[ {"key": "any key" } ] }]
ceci est également valable json, mais son retour tableau par votre code. cochez cette - violonUn objet JSON est un objet. Pour vérifier si un type est un type d'objet, d'évaluer le constructeur de propriété.
La même chose s'applique à tous les autres types:
Si vous essayez de vérifier le type d'un
object
après avoir analyser unJSON
chaîne, je vous suggère de vérifier le constructeur attribut:Ce sera beaucoup plus rapide pour vérifier que typeof ou instanceof.
Si un librairie JSON ne pas retourner des objets construits avec ces fonctions, je serais très suspiciouse d'elle.
Vous pourriez faire votre propre constructeur de parsing JSON:
Puis vérifier instanceof pour voir s'il avait besoin de l'analyse à l'origine
La réponse par @PeterWilkinson ne fonctionne pas pour moi, car un constructeur pour une "tapé" objet est personnalisé sur le nom de cet objet. J'ai eu à travailler avec typeof
J'ai écrit un module npm pour résoudre ce problème. Il est disponible ici:
object-types
: un module de trouver ce littérale types comprennent des objetsInstaller
Utilisation
Prendre un coup d'oeil, il faut résoudre votre problème exact. Laissez-moi savoir si vous avez des questions! https://github.com/dawsonbotsford/object-types
vous pouvez également essayer d'analyser les données et de vérifier ensuite si vous avez des objet:
- Je combiner l'opérateur typeof avec un chèque du constructeur d'attribut (par Pierre):
Résultat:
Essayer cette
Il travaille pour l'exemple ci-dessous
La réponse de pierre avec une vérification supplémentaire! Bien sûr, pas 100% garanti!
Pourquoi ne pas vérifier le Numéro - un peu plus court et travaille à IE/Chrome/FF/node.js
JS:
essayer cette façon sale