-4

I am checking if a JSON object contains a specific property.

I have this JSON document:

{
    "market_name": "Dakar",
    "market_description": "Tambacounda Market N1",
    "localization_id": 2,
    "long": 13.776796,
    "lat": -13.672198,
    "country": "Senegal",
    "regione": {
        "@nil": "true"
    },
    "province": {
        "@nil": "true"
    },
    "city": {
        "@nil": "true"
    },
    "district": {
        "@nil": "true"
    },
    "town": {
        "@nil": "true"
    },
    "village": {
        "@nil": "true"
    },
    "commoditiesList": {
        "commodity": [{
            "commodity_details_id": 8,
            "commodity_name_en": "Carrot",
            "commodity_name": "Carrot",
            "description": "Carrot",
            "image_link": "https://firebasestorage.googleapis.com/v0/b/fao-digital-services-portfolio.appspot.com/o/img%2Ficons%2Fagrimarket%2Fcommodity%2Fcarrot.png?alt=media&token=f295c6b3-abf8-4b51-97c9-582d9188675f",
            "market_commodity_details_id": 26,
            "price_series_id": 9,
            "last_price_date": "2017-12-18+01:00",
            "last_avg_price": 48.37,
            "currency": "XOF",
            "measure_unit": "kilogram"
        },
        {
            "commodity_details_id": 4,
            "commodity_name_en": "Red onion",
            "commodity_name": "Red onion",
            "description": "Red onion",
            "image_link": "https://firebasestorage.googleapis.com/v0/b/fao-digital-services-portfolio.appspot.com/o/img%2Ficons%2Fagrimarket%2Fcommodity%2Fonion-red.png?alt=media&token=4ec9de4e-6e5a-4198-9bcd-21b692760618",
            "market_commodity_details_id": 24,
            "price_series_id": 11,
            "last_price_date": "2017-12-18+01:00",
            "last_avg_price": 33.33,
            "currency": "XOF",
            "measure_unit": "kilogram"
        },
        {
            "commodity_details_id": 6,
            "commodity_name_en": "Green Beans",
            "commodity_name": "Green Beans",
            "description": "Green Beans",
            "image_link": "https://firebasestorage.googleapis.com/v0/b/fao-digital-services-portfolio.appspot.com/o/img%2Ficons%2Fagrimarket%2Fcommodity%2Fgreen_beens.png?alt=media&token=5022f2c8-5751-4dd3-b695-2518e9586943",
            "market_commodity_details_id": 25,
            "price_series_id": 17,
            "last_price_date": "2017-12-18+01:00",
            "last_avg_price": 778,
            "currency": "XOF",
            "measure_unit": "kilogram"
        }]
    }
}

I want to check if in this JSON document exist the commodity array into the commodityList object.

If I try to use this expression:

response.hasOwnProperty('commoditiesList.commodity')

it returns false and I can't understand why.

Testing on the commoditiesList wrapper object:

 response.hasOwnProperty('commoditiesList') 

it works fine.

What am I missing?

Nope
  • 22,147
  • 7
  • 47
  • 72
AndreaNobili
  • 40,955
  • 107
  • 324
  • 596
  • `hasOwnProperty` as name suggests, will check for properties that it has. Any property that belongs to sub array/object is not its own property. Its a property of its children. – Rajesh Dec 21 '17 at 09:48
  • https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty – Nope Dec 21 '17 at 09:53

2 Answers2

5

You can check only one-level properties with hasOwnProperty.

const obj = {
  a: {
    b: 5
  }
};

console.log(obj.hasOwnProperty('a.b'));

Actually you can have a property with name commoditiesList.commodity like this, so why it can't determine do you mean own property or a property of a property. Property of it's sub object is not it's own property.

const obj = {
  'commoditiesList.commodity': 5
};

console.log(obj.hasOwnProperty('commoditiesList.commodity'));

If you want to check the existence of commodity, you can try something like

if(obj.commoditiesList && obj.commoditiesList.commodity) {

}
Suren Srapyan
  • 66,568
  • 14
  • 114
  • 112
0

response.commoditiesList.hasOwnProperty('commodity') // will return true

Catalin
  • 248
  • 1
  • 2
  • 12