www.webdeveloper.com
Results 1 to 7 of 7

Thread: Accessing JSON Object

  1. #1
    Join Date
    Oct 2007
    Posts
    154

    Accessing JSON Object

    Hi,

    I'm trying to retreive an associative array passed with JSON.

    alert(JSON.stringify(myJson)); produces the string below.

    {"1":[{"num_inquiries":"60","num_quotes":"45"}],"2":[{"num_inquiries":"4","num_quotes":"2"}],"3":[{"num_inquiries":"60","num_quotes":"50"}]}

    How do I get the num_inquiries.

    I tried alert(myJson["1"]["num_inquiries"]) and alert(myJson[1]["num_inquiries"]) but they don't work.

    Any help would be appreciated.

  2. #2
    Join Date
    Mar 2005
    Location
    Behind you...
    Posts
    969
    The thing about .stringify() is that it doesn't always display the true keys or values, at least in terms of their type.
    Have you tried:
    Code:
    console.log(myJson[1][num_inquiries]);
    Also, as a side note, it's a good habbit to use console.log() instead of alert(), especially if you are trying to debug. Alerts don't always display variables and information related to code very well, so it's best to display them in the console where you can see a better representation. Things like objects are actually shown as objects.
    "Given billions of tries, could a spilled bottle of ink ever fall into the words of Shakespeare?"

  3. #3
    Join Date
    Oct 2007
    Posts
    154
    Hi Sup,

    I'm getting a "num_inquiries is not defined" error now.

  4. #4
    Join Date
    Oct 2007
    Posts
    154
    Hmmmm

    console.log(myJson[1][0].num_inquiries); works. Any idea why it would place the 2nd part into an array?

  5. #5
    Join Date
    Mar 2005
    Location
    Behind you...
    Posts
    969
    I guess I'll have to ask what your actual JSON object looks like then. If I use JSON.parse() on the JSON string you provided my code calls the variable correctly. But that's just the parsed JSON object of that string, which isn't an exact representation of the actual JSON object.

    One thing you can do is
    Code:
    console.log(myJson);
    If you press F12 and click on the 'Console' tab in your browser you'll see your JSON object displayed in this developer console. I can't really speak on how it works in other browsers (as I don't use them frequently enough for dev/debuggin, only for display/functionality test), but in Chrome you'll be able to click and open this JSON object and expand out all of the key/value pairs inside. This would be a more true representation of your object and allow you to see the actual keys you need to reference. If the key is a string name it will contain quotes around it. This should help you see exactly what key values you need to call to get your value.
    "Given billions of tries, could a spilled bottle of ink ever fall into the words of Shakespeare?"

  6. #6
    Join Date
    Dec 2011
    Location
    Centurion, South Africa
    Posts
    795
    Code:
    console.log(myJson[1][0].num_inquiries);
    Explained step by step:

    myJson
    {"1":[{"num_inquiries":"60","num_quotes":"45"}],"2":[{"num_inquiries":"4","num_quotes":"2"}],"3":[{"num_inquiries":"60","num_quotes":"50"}]}

    myJson[1]
    {"1":[{"num_inquiries":"60","num_quotes":"45"}],"2":[{"num_inquiries":"4","num_quotes":"2"}],"3":[{"num_inquiries":"60","num_quotes":"50"}]}

    myJson[1][0]
    {"1":[{"num_inquiries":"60","num_quotes":"45"}],"2":[{"num_inquiries":"4","num_quotes":"2"}],"3":[{"num_inquiries":"60","num_quotes":"50"}]}

    myJson[1][0].num_inquiries
    {"1":[{"num_inquiries":"60","num_quotes":"45"}],"2":[{"num_inquiries":"4","num_quotes":"2"}],"3":[{"num_inquiries":"60","num_quotes":"50"}]}
    Last edited by bionoid; 04-20-2014 at 08:49 PM.
    JavaScript: Learn | Validate | Compact | bionoid

  7. #7
    Join Date
    May 2005
    Location
    Dirty Jersey
    Posts
    1,402
    sc_king,

    to the best of my knowledge, indexes within a javascript array cannot be referenced by their name. for example:

    Code:
    arr = ["cat"]
    alert(arr["cat"]) //undefined
    as you know, your JSON consists of three objects. each object contains one array. so of course

    Code:
    myJson["1"]
    is a valid reference to an object. now, this is where the issue of accessing "num_inquries" comes into issue. first, you have to reference the array index that contains the object, and then you can reference the object.

    therefore:

    Code:
    alert(myJson["1"]["num_inquiries"])
    doesn't work because it's just as invalid as my "cat" example was. when you access the "1" object, you then have to access the array index:

    Code:
    myJson["1"][0]
    and then you'll be able to reference the object within:

    Code:
    myJson["1"][0]["num_inquiries"]
    two thoughts:

    1. if you control what creates the JSON, get rid of the array. it's redundant if all your objects are always in index 0 and the arrays are never longer than 1 item.

    2. console.log is better than alert (except for quickly listing out items in an array )

    3. bionoid's example was pretty good, except it missed a line referring only to object "1"
    Last edited by Angry Black Man; 04-21-2014 at 09:55 AM.

    1. If you reply to my post, and your reply would then appear directly beneath my post, DON'T QUOTE MY ENTIRE POST!!! IT'S REDUNTANT!!! IT'S ASININE!!!! IT'S REDUNDANTLY ASININE!!!!! DON'T DO IT!!!!
    2. jQuery extends the functionality of JavaScript. If you don't know JavaScript, give up on that jQuery script and learn JavaScript. You'll save yourself a lot of frustration, I promise.
    3. Use the [code][/code] tags. Otherwise, you may be left wondering why no one responded to your eyesore of a thread.


Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
HTML5 Development Center



Recent Articles