JS read json file and use as an object
我在试着把数组中的项目数放到这一块里
杰森
1 2 3 4 5 6 7 8 9
| {
"collection" : [
{
"item":"apple"
},
{
"item":"banana"
}]
} |
使用以下JS(nodejs):更新用户"elssar"的答案
1 2
| var data = JSON.parse(fs.readFileSync(filePath));
console.log(data.collection.length); |
预期结果:2
如果不指定编码,data将是缓冲区而不是字符串(由于用户nils)。json.parse应该对两者都有效。现在我得到一个错误Unexpected token ? at Object.parse (native)。知道怎么解决这个问题吗?(使用节点5.2.0)
- node.js'fs.readfile()返回缓冲区而不是字符串的原因可能重复?
- @nils实际上不是一个副本,因为设置内容类型只会给op一个字符串,这并不能解决他的问题。
- 副本:stackoverflow.com/questions/10011011/…
您需要将文件的内容解析为JSON。
1 2 3 4
| fs.readFile(filePath, function (error, content) {
var data = JSON.parse(content);
console.log(data.collection.length);
}); |
或
1
| var data = JSON.parse(fs.readFileSync(filePath)); |
或者,您可以只使用requirejson文件(文件扩展名必须是.json)
1 2
| var data = require(filePath);
console.log(data.collection.length); |
- 您的第一个代码片段可能不起作用,因为data是未定义的,即使您使用content,它也将是一个缓冲区。
- 哎呀!固定:
- 也发现了。但对我来说还是不行。它仍然说data是未定义的。你给我的选择似乎奏效了。但为什么我的intelli说它是一个内置的函数,但也指出:use of an implicitly declared global variable 'require'??
- 您还没有设置编码…看看我的复制链接。
- @不需要NILS。JSON.parse在不设置编码的情况下工作
- @Matthijsvanhest刚刚测试了它工作的代码片段。您是否试图在fs回调函数范围之外使用data?由于变量数据是该作用域的本地数据,因此它在外部不可用。至于你的IDES警告,没有线索,不要使用它。
- 编码不是必需的,但在返回缓冲区或字符串时会有所不同。@埃尔莎,我不能让它工作。不,我足够聪明知道作用域,所以我只是在fs回调函数的作用域内使用它。
- 哦,很高兴知道json.parse也可以使用缓冲区。不过,有一点,您不能在外部访问console.log中的data,因为fs.readFile是一个异步调用(在所有当前运行的代码都完成之后调用)。
- 尼尔斯!是的,我已经忘记了。我要把这个错误归咎于我昨晚睡了2个小时。)
- 那么应该使用fs.readFileSync?
- 它说unexpected token ? at Object.parse (native)使用var data = JSON.parse(fs.readFileSync(filePath));有什么想法吗?
- @Matthijsvanhest您使用的是哪个版本的节点?
- @ELSSAR 5.2.0版
- 你的文件可能有问题。当我测试的时候,我可以在一个文件中看到一个类似的错误
- 试试JSON.parse(fs.readFileSync(filePath).toString())或JSON.parse(fs.readFileSync(filePath, 'utf-8'))。