使用第三方库swift 4提取JSON数据

时间:2018-05-10 05:38:06

标签: json swift cocoapods

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

但我坚持解码JSON字符串的逻辑,以便我可以访问实际参数,例如name,display_address和price。我之前使用过“Decode”,但从未通过第三方库。我确信这是可能的,我可能只是一步或两步之遥,但我现在缺乏经验阻碍了这一点。任何帮助。谢谢

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

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)
        }
    }
}

以下是数据:

[
  {
    "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"
  }
]

1 个答案:

答案 0 :(得分:1)

第三方库已经为您完成了所有解码。不要将响应转换回JSON字符串。

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

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]?

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

for business in response.businesses {
    print(business.name)
}