JS - Как преобразовать две строки и передать как один JSON объект (НЕ JSON .parse ()) - PullRequest
2 голосов
/ 11 марта 2020

Я только начал узнавать о том, как делать http-запросы и API.

Я использую API-интерфейс Bitcoinaverage, который возвращает JSON для крипто-и фиатной валюты, которую вы запрашиваете. Самый первый ключ в json - это объект, имя которого получено из запроса, который вы сделали.

Например, если вы хотите, чтобы цена BT C в долларах США, объект имя будет BTCUSD. Или BTCEUR et c ...

{
  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 являются строками, когда возвращаются парсером тела.

Я думал об использовании 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");
});

1 Ответ

2 голосов
/ 11 марта 2020

Вы можете получить доступ к динамически создаваемым JSON ключам, используя синтаксис data["YOUR STRING HERE"]

Так что в вашем примере, что-то вроде data[crypto+fiat]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...