nodejs JSONparsing.issue

我想parsing一个JSON来获得一个特定的行。 我已经尝试了很多不同的东西,我可以find,这是尽可能接近我可以得到。

什么即时尝试阅读:

[{ "id": "pinkcoin", "name": "PinkCoin", "symbol": "PINK", "rank": "321", "price_usd": "0.0281999", "price_btc": "0.00000165", "24h_volume_usd": "195433.0", "market_cap_usd": "10470475.0", "available_supply": "371294750.0", "total_supply": "388294750.0", "max_supply": null, "percent_change_1h": "5.48", "percent_change_24h": "10.83", "percent_change_7d": "-7.62", "last_updated": "1513043947" }] 

我试图从这个拉“price_usd”部分…下面是代码即时通讯使用:

 var request = require('request'); request('https://api.coinmarketcap.com/v1/ticker/pinkcoin/', function (error, response, body) { fs.readFile(body, 'utf8', function (err, data) { if (err) { console.log('Error: ' + err); return; } data = JSON.parse(data); bot.sendMessage({ to: channelID, message: data.price_usd }); }); }); 

但是,当我触发这个代码发生,我在控制台中得到这个:

 Error: Error: ENAMETOOLONG: name too long, open '[{ "id": "pinkcoin", "name": "PinkCoin", "symbol": "PINK", "rank": "319", "price_usd": "0.0284066", "price_btc": "0.00000166", "24h_volume_usd": "195093.0", "market_cap_usd": "10547221.0", "available_supply": "371294750.0", "total_supply": "388294750.0", "max_supply": null, "percent_change_1h": "6.15", "percent_change_24h": "11.55", "percent_change_7d": "-6.97", "last_updated": "1513044245" }]' 

我一直在寻找解决这个问题,但即时通讯无处

我不知道你为什么在那里使用fs.readFile 。 您正在接受api调用的结果,返回整个JSON对象,并将其用作fs.readFilepath参数。 那个JSON对象实际上是一个非常长的string,并且它比允许的文件path长,所以引发了ENAMETOOLONG

来自requestbody值应该已经有了你想要的JSON。 除非你想从你的文件系统读取一些文件,根据来自coinmarketcap的API的响应值,然后用fs删除这个部分。

编辑:另外,作为奖金,你也没有正确地使用结果。 它返回一个数组,其中第一个对象有你的结果。 我不完全确定在哪种情况下它返回多个值。 所以你想这个:

 bot.sendMessage({ to: channelID, message: data.price_usd }); 

…看起来像这样:

 bot.sendMessage({ to: channelID, message: data[0].price_usd });