Я получаю следующий вывод Json из URL-адреса:
{
"Meta Data": {
"1. Information": "FX Intraday (5min) Time Series",
"2. From Symbol": "USD",
"3. To Symbol": "TRY",
"4. Last Refreshed": "2020-12-18 21:55:00",
"5. Interval": "5min",
"6. Output Size": "Full size",
"7. Time Zone": "UTC"
},
"Time Series FX (5min)": {
"2020-12-18 21:55:00": {
"1. open": "7.6181",
"2. high": "7.6256",
"3. low": "7.6181",
"4. close": "7.6181"
},
"2020-12-18 21:50:00": {
"1. open": "7.6232",
"2. high": "7.6244",
"3. low": "7.6181",
"4. close": "7.6181"
},
"2020-12-18 21:45:00": {
"1. open": "7.6244",
"2. high": "7.6244",
"3. low": "7.6208",
"4. close": "7.6232"
},
"2020-12-18 21:40:00": {
"1. open": "7.6234",
"2. high": "7.6262",
"3. low": "7.6201",
"4. close": "7.6244"
},
.
.
.
} }
Мне нужно отсортировать значения «Time Series FX (5min)» по ключам (дате) в обратном порядке, поэтому первая позиция имеет самое последнее время даты. Затем я хочу извлечь первые (последние) 288 элементов.
Что мне нужно в возвращаемом списке (списках), так это только дата, время и значение '4. закрывать'
например что-то вроде этого:
list<String> Date_time = [2020-12-18 21:55:00, 2020-12-18 21:50:00, 2020-12-18 21:45:00,...]
list<double> values = [7.6181, 7.6181, 7.6232,...]
Вот часть кода:
void fetchDayValues() async {
final response = await http.get(
'https://www.alphavantage.co/query?function=FX_INTRADAY&from_symbol=' +
symbol.substring(0, 3) +
'&to_symbol=' +
symbol.substring(4) +
'&interval=5min&outputsize=full&apikey=NS8IP79OIRVVH7Q0');
if (response.statusCode == 200) {
final jsonInput = json.decode(response.body) as Map;
final data = jsonInput["Time Series FX (5min)"] as Map;
}
}
Я просмотрел другие ответы, но не могу найти решение своей проблемы. Как это сделать? Спасибо
Этот код сортирует данные по дате. Он использует сравнение строк для простоты.
Вы можете попробовать это на Dartpad.
import 'dart:convert';
void main() {
final raw_string = '''{"Time Series FX (5min)": {
"2020-12-18 21:50:00": {
"1. open": "7.6232",
"2. high": "7.6244",
"3. low": "7.6181",
"4. close": "7.6181"
},
"2020-12-18 21:55:00": {
"1. open": "7.6181",
"2. high": "7.6256",
"3. low": "7.6181",
"4. close": "7.6181"
},
"2020-12-18 21:40:00": {
"1. open": "7.6234",
"2. high": "7.6262",
"3. low": "7.6201",
"4. close": "7.6244"
},
"2020-12-18 21:45:00": {
"1. open": "7.6244",
"2. high": "7.6244",
"3. low": "7.6208",
"4. close": "7.6232"
}}}''';
final decoded = jsonDecode(raw_string)["Time Series FX (5min)"] as Map;
final sortedKeys = decoded.keys.toList()..sort((a,b)=> b.toString().compareTo(a.toString()));
final sortedValues = sortedKeys.map((k)=> decoded[k]["4. close"]).toList();
print(sortedKeys);
print(sortedValues);
}
Это основная проблема сортировки списка, но я все равно напишу ответ.