我刚刚开始学习如何发出 http 请求和 API。
我一直在使用 Bitcoinaverage API,它会返回您请求的加密货币和法定货币的 JSON。 json 中的第一个键是一个对象,其名称源自您发出的请求。
例如,如果您想要以美元计价的 BTC 价格,则对象的名称将为 BTCUSD。或者 BTCEUR 等...
{
BTCUSD: { //The only key that changes based on your request. LTCUSD, ETHEUR etc...
ask: 7825.19,
bid: 7817.5,
last: 7816.09,
high: 8166.22,
low: 7783.28,
volume: 57342.21168518,
open: {
hour: 7844.91,
day: 7900.31,
week: 8769.23,
month: 9812.03,
month_3: 7226.94,
month_6: 10081.48,
year: 3883.6
},
averages: { day: 7948.24, week: 8573.39, month: 9315.18 },
changes: { price: [Object], percent: [Object] },
volume_percent: 71.59,
timestamp: 1583923337,
display_timestamp: '2020-03-11 10:42:17',
display_symbol: 'BTC-USD'
}
}
如果我想记录,说出“last”的值,我可以写这样的东西:
app.post("/", function (req, res) {
var crypto = req.body.crypto;
var fiat = req.body.fiat;
restClient.tickerAllGlobal(crypto, fiat, function(response) {
var data = JSON.parse(response);
console.log(data.BTCUSD.last);
});
});
如果用户请求以欧元而不是美元为单位的价格,上面的代码片段显然不起作用。
我以为我可以简单地连接两个变量并编写 console.log(data.crypto+fiat.last); ,但我只得到“NaN”响应。我猜测这是因为 crypto
和 fiat
变量在 body-parser 返回时是字符串。
我考虑过使用 JSON.parse()
但这也行不通,因为 crypto+fiat
不是有效的 json。
然后我考虑使用 eval()
,不确定它是否有效,但即使有效,在用户输入上使用它也不是一个好主意,对吗?
那么我该如何处理从用户那里收到的请求而不重复自己呢?
如果有不清楚的地方,这是完整的代码:
const express = require("express");
const bodyParser = require("body-parser");
const bitcoinAverage = require("bitcoinaverage");
const publicKey = '123456789...';
var restClient = bitcoinAverage.restfulClient(publicKey);
const app = express();
app.use(bodyParser.urlencoded({
extended: true
}));
app.get("/", function (req, res) {
res.sendFile(__dirname + "/index.html");
});
app.post("/", function (req, res) {
var crypto = req.body.crypto;
var fiat = req.body.fiat;
restClient.tickerAllGlobal(crypto, fiat, function(response) {
var data = JSON.parse(response);
var price = data.crypto+fiat.last;
console.log(price);
});
});
app.listen(3000, function () {
console.log("Server running:3000");
});
最佳答案
您可以使用语法 data["YOUR STRING HERE"]
因此,在您的示例中,类似于 data[crypto+fiat]
关于javascript - JS - 如何转换两个字符串并作为一个 JSON 对象传递(而不是 JSON.parse()),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60637610/