首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用第三方库SWIFE4提取JSON数据

使用第三方库SWIFE4提取JSON数据
EN

Stack Overflow用户
提问于 2018-05-10 05:38:06
回答 1查看 147关注 0票数 1

我在我的Xcode文件夹中使用第三方GitHub库。它允许我访问Yelps API,在那里我想在我的应用程序中获得搜索结果。我正在成功下载将数据转换为JSON字符串。

但是,我仍然停留在解码JSON字符串的逻辑上,这样我就可以访问实际的参数,比如名称、display_address和价格。我以前使用过“解码”,但从来没有通过第三方库。我确信这是可能的,我可能只差一两步,但我的缺乏经验正在阻碍这一点。任何帮助。谢谢

下面是我获取JSON数据的函数,下面是我得到的响应

代码语言:javascript
复制
func getYelp() {
    let yelpAPIClient = CDYelpAPIClient(apiKey: "MY_API_KEY")

    yelpAPIClient.cancelAllPendingAPIRequests()
    CDYelpFusionKitManager.shared.apiClient = yelpAPIClient

    CDYelpFusionKitManager.shared.apiClient.searchBusinesses(byTerm: "Bars", 
        location: "Hollywood, California", 
        latitude: nil, 
        longitude: nil, 
        radius: 10000, 
        categories: [CDYelpBusinessCategoryFilter.bars],
        locale: CDYelpLocale.english_unitedStates, 
        limit: 5, 
        offset: 0, 
        sortBy: CDYelpBusinessSortType.distance, 
        priceTiers: [CDYelpPriceTier.twoDollarSigns],
        openNow: true, 
        openAt: nil, 
        attributes: nil) { (response) in

        if let response = response,
            let businesses = response.businesses?.toJSONString(),
            businesses.count > 0 {
            print(businesses)
        }
    }
}

以下是数据:

代码语言:javascript
复制
[
  {
    "name" : "The Know Where Bar",
    "coordinates" : {
      "latitude" : 34.101480000000002,
      "longitude" : -118.3127424
    },
    "rating" : 4.5,
    "price" : "$$",
    "review_count" : 170,
    "display_phone" : "(323) 871-4108",
    "location" : {
      "state" : "CA",
      "address3" : "",
      "address1" : "5634 Hollywood Blvd",
      "city" : "Los Angeles",
      "display_address" : [
        "5634 Hollywood Blvd",
        "Los Angeles, CA 90028"
      ],
      "zip_code" : "90028",
      "country" : "US"
    },
    "id" : "KOj4TvBuvRLXlBuG2vrZeQ",
    "categories" : [
      {
        "title" : "Cocktail Bars",
        "alias" : "cocktailbars"
      },
      {
        "title" : "Jazz & Blues",
        "alias" : "jazzandblues"
      },
      {
        "title" : "Pubs",
        "alias" : "pubs"
      }
    ],
    "transactions" : [

    ],
    "distance" : 2232.7094070718849,
    "phone" : "+13238714108",
    "image_url" : "https:\/\/s3-media3.fl.yelpcdn.com\/bphoto\/Ehus0C-bAoA-6fNbwGpSYA\/o.jpg",
    "is_closed" : false,
    "url" : "https:\/\/www.yelp.com\/biz\/the-know-where-bar-los-angeles?adjust_creative=xVfmfDi4k3F3Jm9zaJU1CA&utm_campaign=yelp_api_v3&utm_medium=api_v3_business_search&utm_source=xVfmfDi4k3F3Jm9zaJU1CA"
  },
  {
    "name" : "Lost Property Bar",
    "coordinates" : {
      "latitude" : 34.1019182,
      "longitude" : -118.32650390000001
    },
    "rating" : 4.5,
    "price" : "$$",
    "review_count" : 143,
    "display_phone" : "(323) 987-4445",
    "location" : {
      "state" : "CA",
      "address3" : "",
      "address1" : "1704 N Vine St",
      "city" : "Hollywood",
      "address2" : "",
      "display_address" : [
        "1704 N Vine St",
        "Hollywood, CA 90028"
      ],
      "zip_code" : "90028",
      "country" : "US"
    },
    "id" : "CBYwPYYEFbpCefJ4rdiyPw",
    "categories" : [
      {
        "title" : "Pubs",
        "alias" : "pubs"
      },
      {
        "title" : "Cocktail Bars",
        "alias" : "cocktailbars"
      }
    ],
    "transactions" : [

    ],
    "distance" : 1145.5564586880064,
    "phone" : "+13239874445",
    "image_url" : "https:\/\/s3-media1.fl.yelpcdn.com\/bphoto\/pswDPAX_3p73JbPEXwThag\/o.jpg",
    "is_closed" : false,
    "url" : "https:\/\/www.yelp.com\/biz\/lost-property-bar-hollywood?adjust_creative=xVfmfDi4k3F3Jm9zaJU1CA&utm_campaign=yelp_api_v3&utm_medium=api_v3_business_search&utm_source=xVfmfDi4k3F3Jm9zaJU1CA"
  },
  {
    "name" : "Sunset & Vinyl",
    "coordinates" : {
      "latitude" : 34.098346200000002,
      "longitude" : -118.32679779999999
    },
    "rating" : 4.5,
    "price" : "$$",
    "review_count" : 42,
    "display_phone" : "(424) 646-3375",
    "location" : {
      "state" : "CA",
      "city" : "Los Angeles",
      "address1" : "1521 Vine St",
      "address2" : "",
      "display_address" : [
        "1521 Vine St",
        "Los Angeles, CA 90028"
      ],
      "zip_code" : "90028",
      "country" : "US"
    },
    "id" : "RKSPAI90ITxbnq1-L_F5NA",
    "categories" : [
      {
        "title" : "Cocktail Bars",
        "alias" : "cocktailbars"
      },
      {
        "title" : "Speakeasies",
        "alias" : "speakeasies"
      },
      {
        "title" : "Lounges",
        "alias" : "lounges"
      }
    ],
    "transactions" : [

    ],
    "distance" : 916.67964443671087,
    "phone" : "+14246463375",
    "image_url" : "https:\/\/s3-media3.fl.yelpcdn.com\/bphoto\/w91DLpKmUGuXTF-zauYAWA\/o.jpg",
    "is_closed" : false,
    "url" : "https:\/\/www.yelp.com\/biz\/sunset-and-vinyl-los-angeles?adjust_creative=xVfmfDi4k3F3Jm9zaJU1CA&utm_campaign=yelp_api_v3&utm_medium=api_v3_business_search&utm_source=xVfmfDi4k3F3Jm9zaJU1CA"
  },
  {
    "name" : "A Simple Bar",
    "coordinates" : {
      "latitude" : 34.129899999999999,
      "longitude" : -118.34882
    },
    "rating" : 5,
    "price" : "$$",
    "review_count" : 168,
    "display_phone" : "(323) 378-5388",
    "location" : {
      "state" : "CA",
      "address3" : "",
      "address1" : "3256 Cahuenga Blvd W",
      "city" : "Los Angeles",
      "display_address" : [
        "3256 Cahuenga Blvd W",
        "Los Angeles, CA 90068"
      ],
      "zip_code" : "90068",
      "country" : "US"
    },
    "id" : "qD3-5yqSyPiz-VpJtPsnkg",
    "categories" : [
      {
        "title" : "Bars",
        "alias" : "bars"
      }
    ],
    "transactions" : [

    ],
    "distance" : 4136.336282884502,
    "phone" : "+13233785388",
    "image_url" : "https:\/\/s3-media2.fl.yelpcdn.com\/bphoto\/JYcRYDteiyjLh3dSAj7fCg\/o.jpg",
    "is_closed" : false,
    "url" : "https:\/\/www.yelp.com\/biz\/a-simple-bar-los-angeles?adjust_creative=xVfmfDi4k3F3Jm9zaJU1CA&utm_campaign=yelp_api_v3&utm_medium=api_v3_business_search&utm_source=xVfmfDi4k3F3Jm9zaJU1CA"
  },
  {
    "name" : "The Woods",
    "coordinates" : {
      "latitude" : 34.098860000000002,
      "longitude" : -118.34478
    },
    "rating" : 4,
    "price" : "$$",
    "review_count" : 456,
    "display_phone" : "(323) 876-6612",
    "location" : {
      "state" : "CA",
      "address3" : "",
      "address1" : "1533 N La Brea Ave",
      "city" : "Hollywood",
      "address2" : "",
      "display_address" : [
        "1533 N La Brea Ave",
        "Hollywood, CA 90028"
      ],
      "zip_code" : "90028",
      "country" : "US"
    },
    "id" : "UEim6Xi_sm78yDUpSfI-OQ",
    "categories" : [
      {
        "title" : "Lounges",
        "alias" : "lounges"
      }
    ],
    "transactions" : [

    ],
    "distance" : 968.92997694605617,
    "phone" : "+13238766612",
    "image_url" : "https:\/\/s3-media3.fl.yelpcdn.com\/bphoto\/wUQYIlojm2d41ZL38zDMgg\/o.jpg",
    "is_closed" : false,
    "url" : "https:\/\/www.yelp.com\/biz\/the-woods-hollywood?adjust_creative=xVfmfDi4k3F3Jm9zaJU1CA&utm_campaign=yelp_api_v3&utm_medium=api_v3_business_search&utm_source=xVfmfDi4k3F3Jm9zaJU1CA"
  }
]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-10 06:45:21

第三方图书馆已经为你做了所有的解码工作。不要将响应转换回JSON字符串。

response.businessesCDYelpBusiness对象的数组,定义如下:

代码语言:javascript
复制
public var id: String?
public var name: String?
public var imageUrl: URL?
public var isClosed: Bool?
public var url: URL?
public var price: String?
public var phone: String?
public var displayPhone: String?
public var photos: [String]?
public var hours: [CDYelpHour]?
public var rating: Double?
public var reviewCount: Int?
public var categories: [CDYelpCategory]?
public var distance: Double?
public var coordinates: CDYelpCoordinates?
public var location: CDYelpLocation?
public var transactions: [String]?

尝试迭代它们并访问它们的属性,如下所示:

代码语言:javascript
复制
for business in response.businesses {
    print(business.name)
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50266173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档