如何对 json 数据进行排序?

How to sort json data?

我使用 nomics crypto APIs 来存储数据。 我的 URL API 电话是 -'http://api.nomics.com/v1/currencies/ticker?key=my-key&ids=BTC,ETH,BNB,DOGE,ADA,XRP,USDT,DOT,BCH,LTC&interval=1d'

所以使用这个 URL 我想按照它们在 URL 中写入的相同顺序调用硬币数据。 但是当我调用它时,JSON 文件会自动按最高 market_cap.

排序

我的后端代码是-

export async function getCryptoBitcoinInfo() {
  const url = 'https://api.nomics.com/v1/currencies/ticker?key=';
  const key =  await getSecret("Nomics_api_key");

  let fullUrl = url + key + '&ids=BTC,ETH,BNB,DOGE,ADA,XRP,USDT,DOT,BCH,LTC&interval=1d'

  console.log("Url: " + fullUrl);

  return fetch(fullUrl, {method: 'get'})
      .then(response => response.json())
}

而我的前端代码是-

$w.onReady(function(){
    getCryptoBitcoinInfo()
            .then(currencyInfo => {
                 $w('#text502').text = currencyInfo[3].price
            })
})

上面的代码应该提取 DOGE 数据,但提取 XRP 数据。

我正在使用 Wix javascript 控制台,即 Velo 进行编码。 为了保持之前的顺序,我需要对 JSON 文件进行排序。我怎样才能在不影响我的 URL 端点的情况下做到这一点? js中需要什么代码??任何帮助将不胜感激。

下面是JSON数据格式

[
      {
        "id": "BTC",
        "currency": "BTC",
        "symbol": "BTC",
        "name": "Bitcoin",
        "logo_url": "https://s3.us-east-2.amazonaws.com/nomics-api/static/images/currencies/btc.svg",
        "status": "active",
        "price": "49893.44419788",
        "price_date": "2021-05-13T00:00:00Z",
        "price_timestamp": "2021-05-13T15:52:00Z",
        "circulating_supply": "18709093",
        "max_supply": "21000000",
        "market_cap": "933461087588",
        "market_cap_dominance": "0.3950",
        "num_exchanges": "384",
        "num_pairs": "60196",
        "num_pairs_unmapped": "5078",
        "first_candle": "2011-08-18T00:00:00Z",
        "first_trade": "2011-08-18T00:00:00Z",
        "first_order_book": "2017-01-06T00:00:00Z",
        "rank": "1",
        "rank_delta": "0",
        "high": "63511.58620446",
        "high_timestamp": "2021-04-13T00:00:00Z",
        "1d": {
          "volume": "122857986900.35",
          "price_change": "-5592.21908418",
          "price_change_pct": "-0.1008",
          "volume_change": "43071195664.36",
          "volume_change_pct": "0.5398",
          "market_cap_change": "-104568141203.38",
          "market_cap_change_pct": "-0.1007"
        }
      },
      { "id": "ETH"
        ...
      },
      { "id": "BNB"
        ...
      },
    { "id": "ADA"
        ...
      },
    { "id": "XRP"
        ...
      },
    ...
    ]

排序是一种方法,但查找数据的真正精确方法是使用 findIndex 函数。

例如:

const dogeIndex = currencyInfo.findIndex(currencyData => currencyData.id === "DOGE")

那么您的新前端代码将类似于:

$w.onReady(function(){
    getCryptoBitcoinInfo()
            .then(currencyInfo => {
                 const dogeIndex = currencyInfo.findIndex(currencyData => currencyData.id === "DOGE")
                 $w('#text502').text = currencyInfo[dogeIndex].price
            })
})

如果您仍然真的想使用排序,那么您可以通过调用在前端对数据进行排序:

currencyInfo.sort((a,b)=> a.id > b.id ? 1 : -1)

这是对数据进行排序的一种方法 json。

基本上,您需要一个 JS 映射,其中包含每种货币应出现的顺序。

const order = { 'BTC': 1, 'ETH': 2, 'BNB': 3, 'DOGE': 4 };

然后使用 Array.sort 根据前一个对象的索引对它们进行排序。

sampleData.sort((data1, data2) => order[data1.id] - order[data2.id]);

检查并 运行 下面的代码片段以便更好地理解。

const order = {
  'BTC': 1,
  'ETH': 2,
  'BNB': 3,
  'DOGE': 4,
  'ADA': 5,
  'XRP': 6,
  'USDT': 7,
  'DOT': 8,
  'BCH': 9,
  'LTC': 10
};

const sampleData = [
  { id: 'BTC' },
  { id: 'DOGE' },
  { id: 'ETH' },
];

const sortedData = sampleData.sort((data1, data2) => order[data1.id] - order[data2.id]);

console.log(sortedData);