ios - Swift 4 从JSON中获取相关数据

标签 ios json swift parsing

伙计们,我想从JSON 获取特定类别图像。我使用 Alamofire 从 JSON 获取数据。我可以分开所有图像和所有类别。我想做的是:例如如果category == Bar,我想得到category_image

case let x where x == "Bar" || x == "Sashimi" || x == "Pizza": imageName = "cafe"
    Alamofire.request("http://95.46.59.150:9095/api/v1/institution/get-all-institutions", method: .get, parameters: nil, encoding: URLEncoding.default, headers: nil).responseJSON {
        response in
        switch response.result {
        case .success:
            if let objJson = response.result.value as! [String: Any]? {
                for (key,value) in objJson {
                    if let result2:[[String:Any]] = value as? [[String:Any]]{
                        for dict in result2 {
                            for (key,value) in dict {
                                if key["category"] == "bar"{
                                }
                                if key == "category_image" {
                                    if let str1: String = value as? String {
                                        Allimages.append(str1)
                                    }
                                }
                            }
                        }
                    }
                }
            }
        case .failure(let error):
            print("Error: \(error)")
        }
        }

JSON

{
"data": [
    {
        "id": 1,
        "socials": {
            "vk": "https://vk.com/cafe_teplominsk",
            "instagram": "https://www.instagram.com/teplo_cafe/",
            "facebook": "https://www.facebook.com/cafeteplominsk"
        },
        "short_title": "#тепло",
        "title": "Кафе #тепло",
        "latitude": "53.93820000",
        "longitude": "27.58520000",
        "image": "https://static.relax.by/images/common/catalog_round_logos/d3e4a58f89cdf9ebba2b6759a6e1fe08.jpg",
        "site": "http://cafeteplo.by/",
        "description": "Невозможно представить заведение с более теплой и радушной атмосферой.\r\n\r\nПомимо отличного сервиса и качественного обслуживания кафе #Тепло поразит Вас необыкновенным интерьером в стиле Прованс с абажурами и оригинальными декорациями.\r\n\r\nХорошо там, где #тепло!",
        "phone": "+375 29 639 22 22",
        "work_time": "С 09:00 до 23.00",
        "category": "Bar",
        "category_image": "http://95.46.59.150:9095/storage/photos/microphone.png",
        "features": "{\"Wi-Fi\": \"Есть\", \"Залы\": \"Зал (85 мест) для некурящих\", \"Сайт\": \"cafeteplo.by\", \"Кухня\": \"Европейская, Итальянская\", \"Метро\": \"Академия наук\", \"Район\": \"Советский\", \"В меню\": \"Пицца, Обеденное меню, Завтраки, Морепродукты, Стейки, Доставка еды, Десерты, Салаты и холодные закуски\", \"Банкет\": \"До 16 чел.\", \"Музыка\": \"Тихая фоновая\", \"Курение\": \"Запрещено\", \"Описание\": \"на портале relax.by\", \"Парковка\": \"Есть\", \"Для детей\": \"Да\", \"Кинотеатры\": \"Октябрь\", \"Предоплата\": \"в размере 30%\", \"Средний счет\": \"$$\", \"Кондиционеры\": \"Есть\", \"Тип заведения\": \"Кафе\", \"способ оплаты\": \"Наличный расчет, Безналичный расчет, Оплата пластиковой картой\", \"Пицца на вынос\": \"Есть\", \"Разливное пиво\": \"Zlatý Bažant, Heineken, Ирландское, Бельгийское, Белорусское\", \"Количество мест\": \"85\", \"Торговые центры\": \"Европа\", \"Большая компания\": \"Да\", \"Дисконтные карты\": \"карта друга со скидкой 10%\", \"Популярные места\": \"парк Дружбы Народов (пл. Бангалор), Логойский тракт\", \"Быстро перекусить\": \"Да\", \"Закрытие заведения\": \"Да\", \"Национальная кухня\": \"Итальянская\", \"Романтический ужин\": \"Да\", \"Предварительный заказ\": \"существует\", \"Условия закрытия залов\": \"50 рублей на человека\", \"Оплата пластиковой картой\": \"Есть\", \"Банкет на открытом воздухе\": \"Нет\", \"Условия закрытия заведения\": \"обсуждается с менеджером\", \"Организационные возможности\": \"Банкетное обслуживание, Вечеринки, Выездное обслуживание, Деловые переговоры, День рождения, Конференция, Корпоративное обслуживание, Организация детских праздников, Презентации, Свадьба, Семинар\", \"Количество залов под мероприятия\": \"1\", \"Что клиент может принести с собой\": \"обсуждается при составлении предзаказа\", \"Владение персоналом иностранными языками\": \"Английский\"}",
        "address": "Минск, ул.Богдановича 138",
        "created_at": "20.07.2017 13:10:42",
        "updated_at": "13.07.2018 13:36:02"
    },

最佳答案

无需遍历响应字典。将 response.value 转换为字典,从中提取 data 对象,将 data 转换为字典并检查您需要的内容

guard let json = response.value as? [String : Any] else { return}
guard let data = json["data"] as? [Sring : Any] else { return }
guard let category = data["category"] as? String else { return }
if (category == "bar") {
{
    let imageUrl = data["category_image"]
}

关于ios - Swift 4 从JSON中获取相关数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51376687/

相关文章:

ios - Swift 无法解析 JSON : Could not cast value of type '__NSCFDictionary' to 'NSArray' error

json - Golang 不正确的 JSON 解码

javascript - JSON 和 Angular 。按 ID(而不是按索引)过滤数组

swift - UiCollectionView 单元格动态宽度

ios - 完全删除 View Controller - Swift

ios - UIScrollView 和 UINavigationController 不适用于 iOS 4

android - 如何将自定义字体系列应用于您的 flutter 应用程序?

ios - NSDate 与不同时区的另一个 NSDate 的本地时间相同

php - 无法使用 Jquery 从行表获取 Post 值 ID 到 PHP

ios - 将数组数据模型转换为字典(swift)