Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Navigating through JSON with JavaScript

OK, I have been searching through this site to find anything similar or enlightening, but I am completely stuck. I am getting some valid JSON and need to parse through it to extract prices. I'm not getting very far.

Here's the JSON:

{
  "result": "success",
  "prices": {
    "vdc": {
      "monthly": "1.00"
    },
    "network": {
      "private": {
        "monthly": "2.00"
      },
      "public": {
        "\/22 (1,111 IP Addresses)": {
          "monthly": "3.00"
        },
        "\/21 (2,222 IP Addresses)": {
          "monthly": "4.00"
        },
        "\/20 (3,333 IP Addresses)": {
          "monthly": "5.00"
        },
        "\/19 (5,555 IP Addresses)": {
          "monthly": "6.00"
        },
        "\/18 (6,666 IP Addresses)": {
          "monthly": "7.00"
        },
        "\/17 (7,777 IP Addresses)": {
          "monthly": "8.00"
        },
        "\/16 (8,888 IP Addresses)": {
          "monthly": "9.00"
        },
        "\/25 (111 IP Addresses)": {
          "monthly": "10.00"
        },
        "\/26 (55 IP Addresses)": {
          "monthly": "11.00"
        },
        "\/27 (22 IP Addresses)": {
          "monthly": "12.00"
        },
        "\/28 (11 IP Addresses)": {
          "monthly": "13.00"
        },
        "\/29 (5 IP Addresses)": {
          "monthly": "14.00"
        },
        "\/23 (900 IP Addresses)": {
          "monthly": "15.00"
        },
        "\/24 (333 IP Addresses)": {
          "monthly": "16.00"
        }
      }
    },
    "blocks": {
      "22": {
        "monthly": "17.00"
      },
      "21": {
        "monthly": "18.00"
      },
      "20": {
        "monthly": "19.00"
      },
      "19": {
        "monthly": "20.00"
      },
      "18": {
        "monthly": "21.00"
      },
      "17": {
        "monthly": "22.00"
      },
      "16": {
        "monthly": "23.00"
      },
      "25": {
        "monthly": "24.00"
      },
      "26": {
        "monthly": "25.00"
      },
      "27": {
        "monthly": "28.00"
      },
      "28": {
        "monthly": "29.00"
      },
      "29": {
        "monthly": "30.00"
      },
      "23": {
        "monthly": "24.00"
      },
      "24": {
        "monthly": "25.00"
      }
    },
    "server": {
      "cpu": {
        "monthly": "26.00"
      },
      "ram": {
        "monthly": "27.00"
      }
    },
    "volume": {
      "gb": {
        "monthly": "28.00"
      }
    },
    "snapshot": {
      "gb": {
        "monthly": "29.00"
      }
    }
  }
}

Tested and validated at jsonlint [dot] com.

After much trying, testing, trying, banging head against my keyboard, trying...this is what I currently have, but it's not producing the desired results (I'll tell you what those are, right after the code snippet).

function gp(x){ 
    for(var i in x){ 
        console.log('700: ',  x[i] );

        if(x[i] != 'success'){
            console.log(733);
            console.log(x[i]);

            for(var j in x[i]){
                console.log(736);
                console.log(x[i][j]);
            }
        }
     }
}

In the console, I see something like this:

enter image description here

What I really would like to see (or find or parse to) is, for example, the monthly price for "gb" from the "volume" element (or is it an item?).

Ideally, I would like to find "volume", "ram" and "cpu" – verify that it's the volume, ram and cpu – then get the monthly price. I did try a few things with JSON parsing, but obviously, I haven't mastered that quite yet either.

Any help would be greatly appreciated.

like image 366
Ace Avatar asked Jan 04 '13 03:01

Ace


People also ask

Can you use JavaScript in JSON?

JSON is a text-based data format following JavaScript object syntax, which was popularized by Douglas Crockford. Even though it closely resembles JavaScript object literal syntax, it can be used independently from JavaScript, and many programming environments feature the ability to read (parse) and generate JSON.

How do I iterate through a JSON object?

Use Object. values() or Object. entries(). These will return an array which we can then iterate over. Note that the const [key, value] = entry; syntax is an example of array destructuring that was introduced to the language in ES2015.

How do I access a JSON object?

To access the JSON object in JavaScript, parse it with JSON. parse() , and access it via “.” or “[]”.


2 Answers

I'm just a bit confused, but heres an example. Save your json to an variable and just go down the tree with node names (unless don't have any).

This should get the volume monthly

 json.prices.volume.gb.monthly 

http://jsfiddle.net/PKUBA/

like image 22
xivo Avatar answered Sep 20 '22 05:09

xivo


If you want to find the objects "volume", "ram" and "cpu" that's simple:

var volume = x.prices.volume;
var ram = x.prices.server.ram;
var cpu = x.prices.server.cpu;

or you can simply use them directly:

console.log(x.prices.volume);

If you want to find the monthly prices then:

var prices = x.prices;
console.log('volume, monthly=', prices.volume.gb.monthly);
console.log('cpu, monthly=', prices.server.cpu.monthly);
console.log('ram, monthly=', prices.server.ram.monthly);

Javascript objects are really simple, there are only 2 syntax for accessing them:

// If the key you're accessing is a constant (hardcoded):
object.key = value;

// If the key you're accessing is stored in another variable:
var k = "key";
object[k] = value;

// Alternatively:
object["key"] = value;
like image 193
slebetman Avatar answered Sep 20 '22 05:09

slebetman