2016-01-14 61 views
1

我想這樣獲得的項目數量的陣列在這片JS讀取JSON文件,並作爲一個對象

JSON

{ 
    "collection" : [ 
    { 
     "item": "apple" 
    }, 
    { 
     "item": "banana" 
    }] 
} 

內使用以下JS使用(的NodeJS)更新與用戶elssar「

var data = JSON.parse(fs.readFileSync(filePath)); 
console.log(data.collection.length); 
01回答

預期結果:

如果不指定編碼data將是一個緩衝器,而不是串(感謝用戶尼爾斯)。 JSON.parse應該適用於兩者。現在我收到一個錯誤Unexpected token ? at Object.parse (native)。任何想法如何解決這個問題? (使用Node 5.2.0)

+0

的[可能的複製爲什麼Node.js的FS .readFile()返回一個緩衝區而不是字符串?](http://stackoverflow.com/questions/6456864/why-does-node-js-fs-readfile-return-a-buffer-instead-of-string) – nils

+0

@nils不是真的重複,因爲設置co內容類型只會給一個字符串,這並不能解決他的問題 – elssar

+0

Duplicate:http://stackoverflow.com/questions/10011011/using-node-js-how-do-i-read-a-json-object -into-server-memory – Nirus

回答

2

您需要將parse文件的內容轉換爲JSON。

fs.readFile(filePath, function (error, content) { 
    var data = JSON.parse(content); 
    console.log(data.collection.length); 
}); 

或者

var data = JSON.parse(fs.readFileSync(filePath)); 

或者,你可以只require JSON文件(文件擴展名必須以.json)

var data = require(filePath); 
console.log(data.collection.length); 
+0

你的第一個代碼片段可能不起作用,因爲'data'是未定義的,即使你使用了content,它也是一個緩衝區。 – nils

+0

@nils oops。固定:) – elssar

+0

發現,以及。它仍然不適合我。它仍然說'數據'是未定義的。 你給了我的選擇似乎工作。但是,爲什麼我的Intelli說它是一個內置函數,但也指出:'使用一個隱式聲明的全局變量'require'' ?? –

相關問題