javascript - JS - 如何转换两个字符串并作为一个 JSON 对象传递(而不是 JSON.parse())

标签 javascript json concatenation

我刚刚开始学习如何发出 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”响应。我猜测这是因为 cryptofiat 变量在 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"]

访问动态创建的 JSON 键

因此,在您的示例中,类似于 data[crypto+fiat]

关于javascript - JS - 如何转换两个字符串并作为一个 JSON 对象传递(而不是 JSON.parse()),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60637610/

相关文章:

javascript - 在 Ext JS 构造函数中将项目插入数组会产生多个项目

javascript - 使用 ember.js 2.0 的 ember cli 应用程序基础

MYSQL 在数据库中使用 CONCAT 和 SUBSTRING 以及 http 和 https URLS

连接两个 64 位整数并将其存储到 [16] 的 uint8_t 数组中

javascript - 通过高度限制可编辑的div区域,在Javascript中模拟onkeyup事件

javascript - NPM 安装 jquery 出现错误?定义未定义?

javascript - 将 NodeJS express 对象传递给 AngularJS 1.6

json - PAW 应用程序 : Filtering JSON in the response panel

将消息传递到 API 时的 Javascript 对象编码/解码

python-3.x - Python3将 'str'(不是 "bytes")连接到 'bytes' TypeError