Reputation: 3515
I have the following node.js file:
[
{
"name":"Apple inc",
"symbol":"AAPL",
"logo":"apple.png",
"price":123,
"prod":"Apple inc, mac, macbook, iphone, ipod, ipad, osx"
},
{
"name":"Nvidia Corporation",
"symbol":"NVDA",
"logo":"nvidia.png",
"price":321,
"prod":"Nvidia Corporation, gforce, g-force, shield"
},
{
"name":"Google inc",
"symbol":"GOOG",
"logo":"google.png",
"price":321,
"prod":"search, android, glass, drive, code school"
}
]
How can i access each object inside without the the index of the array, using only the symbol. Today i have a for loop that is running through all the array:
var fs = require('fs');
var stocks = JSON.parse(fs.readFileSync("stocks.json"));
for (var i=0; i<stocks.length; i++) {
if (stocks[i].symbol==="GOOG") {
console.log(i+ " ." , stocks[i] );
}
If i'll change the Json file to this format :
{ "APPL":
{
"name":"Apple inc",
"symbol":"AAPL",
"logo":"apple.png",
"price":123,
"prod":"Apple inc, mac, macbook, iphone, ipod, ipad, osx"
},
"NVDA":
{
"name":"Nvidia Corporation",
"symbol":"NVDA",
"logo":"nvidia.png",
"price":321,
"prod":"Nvidia Corporation, gforce, g-force, shield"
},
"GOOG":
{
"name":"Google inc",
"symbol":"GOOG",
"logo":"google.png",
"price":321,
"prod":"search, android, glass, drive, code school"
}
}
Upvotes: 0
Views: 100
Reputation: 9261
you can use a simple for loop to iterate through
var obj = { "APPL":
{
"name":"Apple inc",
"symbol":"AAPL",
"logo":"apple.png",
"price":123,
"prod":"Apple inc, mac, macbook, iphone, ipod, ipad, osx"
},
"NVDA":
{
"name":"Nvidia Corporation",
"symbol":"NVDA",
"logo":"nvidia.png",
"price":321,
"prod":"Nvidia Corporation, gforce, g-force, shield"
},
"GOOG":
{
"name":"Google inc",
"symbol":"GOOG",
"logo":"google.png",
"price":321,
"prod":"search, android, glass, drive, code school"
}
};
for(var i=0, keys = Object.keys(obj),len=keys.length; i <len ; i++){
if(obj[keys[i]].symbol === "GOOG"){
console.log(i +'.' +obj[keys[i]]);
}
}
Object.keys(obj)
will return ["APPL", "NVDA", "GOOG"]
to check if GOOG exists, you can do this
var result = Object.keys(obj).indexOf('GOOG') > -1;
console.log(result); // will be true
Upvotes: 1
Reputation: 7117
If I'm understanding correctly, you'll be using the second format going forward?
That makes it as simple as :
var stocks = JSON.parse(fs.readFileSync("stocks.json"));
var goog = stocks.GOOG;
console.log(goog);
Otherwise you could query the original array if you wanted to:
var stocks = JSON.parse(fs.readFileSync("stocks.json"));
var goog = stocks.filter(function(stock) { if(stock.symbol == 'AAPL') return true; } );
console.log(goog[0]);
PS. don't use readFileSync
it's really bad practice. ;)
Upvotes: 1