首页 > 解决方案 > 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”响应。我猜那是因为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");
});

标签: javascriptjsonconcatenation

解决方案


您可以使用语法访问动态创建的 JSON 键data["YOUR STRING HERE"]

所以在你的例子中,像data[crypto+fiat]


推荐阅读