简体   繁体   中英

How to extract specific info from json

I am trying to get the subdivisions.names.en from the json below but keep getting a "TypeError: location.subdivisions.names is undefined" error. I'm sure it something simple & prob just need more sleep ;)

I can get other the info I need - this works:

alert(location.city.names.en + ' ' + location.postal.code);

But this does not:

alert(location.subdivisions.names.en);

Here is my json:

{
    "continent": {
        "code": "OC",
        "geoname_id": xxx,
        "names": {
            "fr": "Océanie",
            "pt-BR": "Oceania",
            "zh-CN": "大洋洲",
            "es": "Oceanía",
            "de": "Ozeanien",
            "ja": "オセアニア",
            "en": "Oceania",
            "ru": "Океания"
        }
    },
    "location": {
        "longitude": xxxx,
        "latitude": -xxxx,
        "time_zone": "Australia/Melbourne"
    },
    "subdivisions": 
    [
        {
            "names": {
                "ru": "Виктория",
                "pt-BR": "Vitória",
                "en": "Victoria"
            },
            "iso_code": "VIC",
            "geoname_id": xxxx
        }
    ],
}

"subdivisions": [ ... indicates, that this variable is an array of objects. You need to index the proper entry:

  alert(location.subdivisions[0].names.en);

Please be aware that there must not be any entry

"subdivisions": [], ...

and a lot of them, so there must be some logic / check on the index.

location.subdivisions.length might help

"subdivisions" is defined as an array in your json file. Depending on what is intended, either change it to be just a hash (remove the square brackets) or modify the access to

alert(location.subdivisions[0].names.en);

You should have a look at what is JSON and how to use it properly because apparently you seem to lack the basic knowledge of how JSON is structured.

That being said, the reason why location.subdivisions.names.en is undefined is because in your JSON it does not exist.

subdivisions is also an array of objects.

In order to access what you are trying to you must use subdivisions[0].names.en .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM