如何对 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);
我使用 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);