Форум программистов, компьютерный форум, киберфорум
Swift
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
4 / 4 / 0
Регистрация: 06.05.2016
Сообщений: 71
1

Парсинг JSON: пропуск "ячейки" массива, которая лежит не под чётным индексом

13.07.2019, 19:06. Показов 2254. Ответов 1

Author24 — интернет-сервис помощи студентам
Доброго времени суток
Мне необходимо распарсить вложенный json.
С самим парсингом проблем никаких, т.е. все данные корректно берутся. Но возникла необходимость пропускать элементы, которые лежат не под чётными индексами. С примером будет понятней

Как выглядит json:
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
    "array": [
        { // индекс == 0, мне он НУЖЕН
            "id": 0
        },
        { // Индекс == 1, мне он НЕ нужен
            "id": 1
        },
        { // Индекс == 2, мне он НУЖЕН
            "id": 2
        },
        { // Индекс == 3, мне он НЕ нужен
            "id": 3
        },
// Ну а дальше точно так же
    ]
}
Парсинг имеет такой вид:
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
enum RootKey: String, CodingKey {
    case array;
}
 
enum IdKey: String, CodingKey {
    case id;
}
struct ArrayValue: Decodable {
    var value: Int = Int(); 
    
    init(from decoder: Decoder) throws {
        let rootContainer = try decoder.container(keyedBy: RootKey.self);
        var arrayUnkeyedContainer = try rootContainer.nestedUnkeyedContainer(forKey: .array);
        var counter: Int = 0;
        while !arrayUnkeyedContainer.isAtEnd {
            if counter % 2 == 0 { // Если индекс чётный
                var arrayContainer = try arrayUnkeyedContainer.nestedContainer(keyedBy: IdKey.self);
                self.value = try arrayContainer.decode(Int.self, forKey: .id);
                print("Value: \(self.value) counter: \(counter) ");
            }
            else {
                // Что мне тут надо написать? Метода next или skip нет
            }
            counter+=1;
        }
    }
}
Теперь, надеюсь, идея понятна. Сразу скажу, что настоящий json содержит абсолютно другие данные, а структуры-обработчики, соответственно, по другому обрабатывают. Но этот момент с циклом - общий. Т.е. мне надо как-то перепрыгнуть через все нечётные элементы. Привёл именно этот код, т.к. на нём легче будет понять, что же мне надо.
Можно, конечно, обработать всё, а потом удалить ненужное, но, я надеюсь, есть способ не совершать столько лишних операций, а как-то "скипнуть"?

Премного благодарен за помощь

P.S. Использовать необходимо именно Decodable протокол, больше никак
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.07.2019, 19:06
Ответы с готовыми решениями:

Найти максимальный элемент массива под четным индексом
Заполнить массив элементами на интервале ввести элементы на экран, найти максимальный элемент под...

элементы массива с нечетным индексом удвоить, с четным индексом заменить на число, вводимое с клавиатуры
Исправьте ошибки и помогите дописать, пожалуйста #include "stdafx.h" #include <iostream>...

Утройте все элементы массива, следующие за первым четным числом с четным индексом
Создайте и обработайте одномерный динамический массив. Задан одномерный массив А. Утройте все...

Определить средние арифметические элементы с чётным индексом и среднее арифметическое с нечётным индексом
Задачи по информатике. Турбо Паскаль. массивы. Определить средние арифметические элементы с...

1
4 / 4 / 0
Регистрация: 06.05.2016
Сообщений: 71
22.07.2019, 08:55  [ТС] 2
Похоже, что скипать объекты невозможно, обязательно надо их парсить
0
22.07.2019, 08:55
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.07.2019, 08:55
Помогаю со студенческими работами здесь

Подсчитать количество отрицательных элементов с четным индексом и сумму положительных с нечетным индексом
полный ноль в VBA, ничего даже в голову не лезет

Записать в каждый элемент массива с четным индексом сумму всех предыдущих элементов исходного массива
Дан одномерный массив целых чисел А. Создать новый массив В, занеся в каждый элемент с четным...

Суммы элементов массива с четным и нечетным индексом
Массив N элементов. Отдельно сумма чисел , которые в массиве под четным числом(индексом) и отдельно...

Удалить из массива все элементы с четным индексом
Пользователь вводит целые числа. Завершается ввод нулем. Числа помещаются в массив. Удалить из него...

Удалить из массива первый отрицательный элемент с четным индексом
Не могли бы Вы подсказать пожалуйста, как в 4-й подзадачи при удалении не обнулять последний...

Посчитать сумму элементов с четным индексом из массива вещественных чисел
Задачу нужно решить тремя способами(и оформить в виде ассемблерной вставки в си или паскаль...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru