Как получить значения из вложенного JSON Swift

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

public IBaseClass BaseProperties {
    get { return this; }
}

Конечно, вам нужно добавить эту часть в свой интерфейс IBaseClass:

public ISingleShot BaseProperties { get; }

Вот соответствующий VB.Net Код:

ReadOnly Property BaseProperties As ISingleShot
Public ReadOnly Property BaseProperties As IBaseClass Implements IClass.BaseProperties
  Get
    Return Me
  End Get
End Property
2
задан Suraj Kumar 19 March 2019 в 09:04
поделиться

6 ответов

Вы можете сделать это как:

for category in responseJSON.categories {
     print(category.categoryName!)
}

Или вы можете использовать функцию map для получения всех categoryName, например:

let categoryNames = responseJSON.categories.map {[111].categoryName}
0
ответ дан Midhun MP 19 March 2019 в 09:04
поделиться

Просто так.

response.categories.forEach { print([110].categoryName) }
0
ответ дан Mohmmad S 19 March 2019 в 09:04
поделиться

Если вы перебираете String, то каждый элемент представляет собой один символ строки.


Вы можете перебирать массив categories

for category in responseJSON.categories {
    print(category.categoryName ?? "No name")
}

Чтобы получить все имена, вы можете использовать compactMap, который удаляет nil значения из массива

[ 111]

Далее:

  • Если каждая категория имеет свое имя, сделайте тип этого свойства необязательным String (тогда вы можете использовать map вместо compactMap)

  • Я бы улучшил ваше наименование. Переименуйте categoryName ключ json в name, используя CodingKeys enum. Тогда вы можете сделать

    category.name
    
0
ответ дан Robert Dresler 19 March 2019 в 09:04
поделиться

этого.

let categories = responseJSON.categories.map { [110].categoryName }
categories.forEach { print([110]) }
0
ответ дан istorry 19 March 2019 в 09:04
поделиться

Если вы хотите получить все JSON-файлы форм categoryName и exercisesInCategory, то вам не нужно передавать жестко закодированный индекс. Используйте следующую модифицированную функцию, она выполнит свою работу.

private func parse(){
    print("Retrieving JSON Data...")
    if let url = Bundle.main.url(forResource: "fitnessData", withExtension: "json") {
        do {
            let data = try Data(contentsOf: url)
            let response = try JSONDecoder().decode(Response.self, from: data)

            for category in response.categories {
                print("Category Name: \(category.categoryName!)")

                for exercises in category.exercisesInCategory {
                    print("Exercise in category: \(exercises)")
                }
            }
        } catch {
            print(error)
        }
    }
}
0
ответ дан RJ168 19 March 2019 в 09:04
поделиться

Если вы хотите поместить оба значения в разные массивы:

var categoryNameList = [String]
var excercisesInCategory = [[String]] 
for category in responseJSON.categories {
    categoryNameList.append(category.categoryName)
    excercisesInCategory.append(category. exercisesInCategory)
}
0
ответ дан denis_lor 19 March 2019 в 09:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: