web-dev-qa-db-fra.com

Comment vérifier que la clé existe dans JSON ou non

J'ai un objet JSON et je veux vérifier que la clé est définie dans cet objet JSON

Voici un objet JSON

var Data_Array = {
    "Private": {
        "Price": {
            "Adult": "18",
            "Child": [{
                "FromAge": "0",
                "ToAge": "12",
                "Price": "10"
            }]
        }
    }
}

Si un objet JSON comme celui-ci, comme vous pouvez le constater, Child n'existe pas, comment le vérifier

var Data_Array = {
    "Private": {
        "Price": {
            "Adult": "18"
        }
    }
}

J'ai essayé

if(Data_Array.Private.Price.Child[0].Price != "undefined"){
    ...
}

Mais il me montre cette erreur

Uncaught TypeError: Impossible de lire la propriété

Je ne suis pas capable de savoir ce que je devrais faire. 

4
User97798

var json = {key1: 'value1', key2: 'value2'}

"key1" in json ? console.log('key exists') : console.log('unknown key')

"key3" in json ? console.log('key exists') : console.log('unknown key')

pour clé enfant

var Data_Array = {
    "Private": {
        "Price": {
            "Adult": "18",
            "Child": [{
                "FromAge": "0",
                "ToAge": "12",
                "Price": "10"
            }]
        }
    }
}

'Child' in Data_Array.Private.Price ? console.log('Child detected') : console.log('Child missing')

créer un enfant variable

var Data_Array = {
    "Private": {
        "Price": {
            "Adult": "18",
            "Child": [{
                "FromAge": "0",
                "ToAge": "12",
                "Price": "10"
            }]
        }
    }
}

var child = 'Child' in Data_Array.Private.Price && Data_Array.Private.Price.Child[0] || 'there is no child'

console.log(child)

s'il n'y a pas d'enfant

var Data_Array = {
    "Private": {
        "Price": {
            "Adult": "18"
        }
    }
}

var child = 'Child' in Data_Array.Private.Price && Data_Array.Private.Price.Child[0] || 'there is no child'

console.log(child)

8
user6748331

Essayer d'obtenir une propriété d'un objet qui n'est pas défini lève une exception. Vous devez vérifier chaque propriété pour l'existence (et le type) tout au long de la chaîne (sauf si vous êtes sûr de la structure).

Utiliser Lodash:

if(_.has(Data_Array, 'Private.Price.Child')) {
    if(Array.isArray(Data_Array.Private.Price.Child) && Data_Array.Private.Price.Child.length && Data_Array.Private.Price.Child[0].Price) {
        // Its has a price!
    }
}
1
Lucky Soni

Vous pouvez utiliser l'opérateur in pour un objet.

L'opérateur in renvoie true si la propriété spécifiée est dans l'objet spécifié.

if ('Child' in Data_Array.Private.Price) {
    // more code
}
1
Nina Scholz

Vérifier si l'enfant n'est pas défini

if (typeof Data_Array.Private.Price.Child!== "undefined") {
    ...
}

Ou vous pouvez utiliser in:

if ("Child" in Data_Array.Private.Price) {
    ...
}

Ou vous pouvez utiliser _.isUndefined(Data_Array.Private.Price.Child) de underscore.js

0
rm4