Сортировка Json во Flutter

Я получаю следующий вывод 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;
                          
    }
  }

Я просмотрел другие ответы, но не могу найти решение своей проблемы. Как это сделать? Спасибо

Это основная проблема сортировки списка, но я все равно напишу ответ.

easeccy 20.12.2020 13:20
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
0
1
203
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Этот код сортирует данные по дате. Он использует сравнение строк для простоты.

Вы можете попробовать это на 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);
}

Другие вопросы по теме