2014-09-01 83 views
0

我有以下Node.js的文件:閱讀JSON檔案如何使用Node.js

[ 
    { 
    "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" 
    } 
] 

如何訪問每個對象中沒有數組的索引,只使用符號。 今天,我有一個對於通過所有陣列運行循環:

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]); 

} 

我是否會改變JSON文件,以這種格式:

{ "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" 
    } 
} 

回答

1

你可以使用一個簡單的for循環迭代通過

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)將返回["APPL", "NVDA", "GOOG"]


,以檢查是否存在GOOG,你可以做到這一點

var result = Object.keys(obj).indexOf('GOOG') > -1; 
console.log(result); // will be true 

DEMO

+0

我如何檢查的關鍵是個股存在例如我要檢查,如果IBM是存在的,我應該做T這樣的: 如果(股票[「IBM」 = NULL) 嘍!一旦我更新了股票,我該如何將它重新寫回文件? – user3502786 2014-09-01 08:13:30

+0

keys是一個數組,所以如果你想檢查一個項目是否存在它,你可以做keys.indexOf('IBM')> -1 – 2014-09-01 09:00:33

+0

感謝它的工作 – user3502786 2014-09-01 09:23:26

1

如果我理解正確的話,你就可以使用第二格式的前進?

這使得它非常簡單:

var stocks = JSON.parse(fs.readFileSync("stocks.json")); 
var goog = stocks.GOOG; 

console.log(goog); 

否則,您可以查詢原始的數組,如果你想:

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。不要使用readFileSync這是非常糟糕的做法。 ;)