javascript - JS - 如何转换两个字符串并作为一个 JSON 对象传递(不是 JSON.parse())
问题描述
我刚开始学习如何发出 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");
});
解决方案
您可以使用语法访问动态创建的 JSON 键data["YOUR STRING HERE"]
所以在你的例子中,像data[crypto+fiat]
推荐阅读
- python - 有没有办法水平翻转kivy中的标签?
- php - Codeigniter 4 - 如何使用 form_checkbox?
- javascript - 访问者进入我的网站时如何通知手机/电脑桌面?
- javascript - 从对象数组中的嵌套数组中删除重复项
- r - R中的逻辑论证
- sqlite - SQLite 中的时差
- python - python argparse 最多 3 个位置参数,每个位置参数的可选标志
- docker - oraclelinux 上的 Oracle 钱包
- r - 添加前导零以将数字调整为正确的格式
- travis-ci - npm install 在 Travis CI 中工作,但在 GitHub Actions 中失败