Как получить только часть данных JSON с помощью swift?

#json #swift #alpha-vantage

#json #swift #alpha-vantage

Вопрос:

Я пытаюсь извлечь данные из формата JSON API с использованием swift. Данные API имеют следующую структуру:

 {
    "Meta Data": {
        "1. Information": "Intraday (5min) open, high, low, close prices and volume",
        "2. Symbol": "IBM",
        "3. Last Refreshed": "2020-08-20 19:05:00",
        "4. Interval": "5min",
        "5. Output Size": "Compact",
        "6. Time Zone": "US/Eastern"
    },
    "Time Series (5min)": {
        "2020-08-20 19:05:00": {
            "1. open": "123.2000",
            "2. high": "123.2000",
            "3. low": "123.2000",
            "4. close": "123.2000",
            "5. volume": "204"
        },
        "2020-08-20 18:50:00": {
            "1. open": "123.2000",
            "2. high": "123.2000",
            "3. low": "123.2000",
            "4. close": "123.2000",
            "5. volume": "100"
        },
        "2020-08-20 18:45:00": {
            "1. open": "123.2000",
            "2. high": "123.2000",
            "3. low": "123.2000",
            "4. close": "123.2000",
            "5. volume": "100"
        },
        "2020-08-20 18:40:00": {
            "1. open": "123.1500",
            "2. high": "123.1500",
            "3. low": "123.1500",
            "4. close": "123.1500",
            "5. volume": "100"
        }
    }
}


  

Вопрос:
Есть ли какой-либо способ получить только последнее (latest), например, два значения «Временных рядов»?

Моя подробная проблема: Приведенный выше пример упрощен всего до 4 значений. На самом деле он может иметь 50.000 значений. До сих пор моей единственной идеей было перенести все данные в словарь. Поскольку словарь не может быть отсортирован, мне пришлось затем создать из него отсортированный массив кортежей. Затем я должен выполнить итерацию по массиву и сохранить только первое x количество элементов. Поскольку существует 50.000 значений, этот процесс требует чрезвычайно много времени, энергии и производительности. Поэтому было бы лучше, если бы я нашел способ получить последнее x количество данных «на лету».

Комментарии:

1. Вы должны иметь возможность указать объем данных, которые вы извлекаете, с помощью параметра в вашем запросе. Проверьте документацию вашего API.

Ответ №1:

Вопрос: Есть ли какой-либо способ получить только последние, например, два значения «Временных рядов»?

Ответ: Нет.

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

Формат даты, который используется в качестве ключа словаря, можно сортировать. Получите ключи словаря, отсортируйте их по убыванию и получите значение для первого ключа.


Пожалуйста, ознакомьтесь с документацией API. Существует outputsize параметр, который можно настроить для извлечения только последних 100 записей ( outputsize=compact )

Комментарии:

1. «Возьмите ключи словаря, отсортируйте их по убыванию и получите значение для первого ключа». Это БОЛЬШАЯ ПОМОЩЬ! Спасибо.