質問編集履歴

1 コードの追加

totot

totot score 20

2019/05/13 09:51  投稿

URLからデータを取得したい
fetchVenueを呼び出したところ
keyNotFound(CodingKeys(stringValue: "group", intValue: nil), Swift.DecodingError.Context(codingPath: [CodingKeys(stringValue: "response", intValue: nil)], debugDescription: "No value associated with key CodingKeys(stringValue: \"group\", intValue: nil) (\"group\").", underlyingError: nil))
というエラーが出てしまい、データを取得できません。
解決方法を教えていただけないでしょうか?
```Swift
class Service {
   
   static let shared = Service()
   
   
   func fetchVenue(location: CLLocationCoordinate2D, completion: @escaping (Empty?, Error?) -> ()) {
       
       let urlString = "https://api.foursquare.com/v2/search/recommendations?ll=\(location.latitude),\(location.longitude)&v=20160607&intent=coffee&limit=15&client_id=\(client_id)&client_secret=\(client_secret)"
       
       fetchGenericJSONData(urlString: urlString, completion: completion)
   }
   
   func fetchGenericJSONData<T: Codable>(urlString: String, completion: @escaping (T?, Error?) -> ()) {
       
       guard let url = URL(string: urlString) else { return }
       URLSession.shared.dataTask(with: url) { (data, resp, err) in
           if let err = err {
               completion(nil, err)
               return
           }
           do {
               let objects = try JSONDecoder().decode(T.self, from: data!)
               // success
               completion(objects, nil)
           } catch {
               completion(nil, error)
           }
           }.resume()
   }
}  
```  
 
```Json  
 
  "meta":{   
     "code":200,  
     "requestId":"5cd6fa5e9fb6b75700851759"  
  },  
  "response":{   
     "group":{   
        "results":[   
           {   
              "displayType":"venue",  
              "venue":{   
                 "id":"4c4fde46dcb5d13ad7b10108",  
                 "name":"Fruit de saison (フルーフ・デゥ・セゾン)",  
                 "contact":{   
 
                 },  
                 "location":{   
                    "address":"外神田4-11-2",  
                    "lat":35.702276108565556,  
                    "lng":139.77286384637375,  
                    "labeledLatLngs":[   
                       {   
                          "label":"display",  
                          "lat":35.702276108565556,  
                          "lng":139.77286384637375  
                       }  
                    ],  
                    "distance":223,  
                    "postalCode":"101-0021",  
                    "cc":"JP",  
                    "city":"東京",  
                    "state":"東京都",  
                    "country":"日本",  
                    "formattedAddress":[   
                       "外神田4-11-2",  
                       "千代田区, 東京都",  
                       "101-0021",  
                       "日本"  
                    ]  
                 },  
                 "categories":[   
                    {   
                       "id":"4bf58dd8d48988d16d941735",  
                       "name":"Café",  
                       "pluralName":"Cafés",  
                       "shortName":"Café",  
                       "icon":{   
                          "prefix":"https:\/\/ss3.4sqi.net\/img\/categories_v2\/food\/cafe_",  
                          "suffix":".png"  
                       },  
                       "primary":true  
                    }  
                 ],  
                 "verified":false,  
                 "stats":{   
                    "tipCount":0,  
                    "usersCount":0,  
                    "checkinsCount":0,  
                    "visitsCount":0  
                 },  
                 "dislike":false,  
                 "ok":false,  
                 "beenHere":{   
                    "count":0,  
                    "lastCheckinExpiredAt":0,  
                    "marked":false,  
                    "unconfirmedCount":0  
                 }  
              },  
              "id":"5cd6fa5fa795bd0039c46dfc",  
              "photo":{   
                 "id":"51bfd28d498e80f211f96907",  
                 "createdAt":1371525773,  
                 "prefix":"https:\/\/fastly.4sqi.net\/img\/general\/",  
                 "suffix":"\/52296049_SkW5N14j2phk0gmnmQ3XGhBFCjy5KJkak2fhB7tKju4.jpg",  
                 "width":720,  
                 "height":960,  
                 "visibility":"public"  
              },  
              "snippets":{   
                 "count":1,  
                 "items":[   
                    {   
                       "detail":{   
                          "type":"tip",  
                          "object":{   
                             "id":"56dc0836498ee85362455de5",  
                             "createdAt":1457260598,  
                             "text":"great selection of heavenly yummy desserts",  
                             "type":"user",  
                             "canonicalUrl":"https:\/\/foursquare.com\/item\/56dc0836498ee85362455de5",  
                             "logView":true,  
                             "agreeCount":0,  
                             "disagreeCount":0,  
                             "todo":{   
                                "count":0  
                             },  
                             "user":{   
                                "id":"11175627",  
                                "firstName":"Roldan",  
                                "lastName":"Toribio",  
                                "gender":"male",  
                                "photo":{   
                                   "prefix":"https:\/\/fastly.4sqi.net\/img\/user\/",  
                                   "suffix":"\/ZDDPKA4LIZFCVYQ4.jpg"  
                                }  
                             }  
                          }  
                       }  
                    }  
                 ]  
              }  
           }  
        ],  
        "totalResults":112  
     },  
     "context":{   
        "searchLocationNearYou":true,  
        "searchLocationMapBounds":false,  
        "searchLocationType":"NearYou",  
        "currentLocation":{   
           "what":"",  
           "where":"",  
           "feature":{   
              "cc":"JP",  
              "name":"Akihabara",  
              "displayName":"Akihabara, Tokyo, Tōkyō",  
              "woeType":22,  
              "slug":"akihabara-japan",  
              "id":"maponics:10004338",  
              "longId":"10004338",  
              "geometry":{   
                 "center":{   
                    "lat":35.701304,  
                    "lng":139.775174  
                 },  
                 "bounds":{   
                    "ne":{   
                       "lat":35.706567,  
                       "lng":139.780981  
                    },  
                    "sw":{   
                       "lat":35.6968,  
                       "lng":139.769614  
                    }  
                 }  
              },  
              "encumbered":true  
           },  
           "parents":[   
 
           ]  
        },  
        "boundsSummaryRadius":600,  
        "relatedNeighborhoods":[   
 
        ],  
        "geoParams":{   
           "ll":"35.7020691,139.7753269",  
           "radius":"600"  
        },  
        "geoBounds":{   
           "circle":{   
              "center":{   
                 "lat":35.7020691,  
                 "lng":139.7753269  
              },  
              "radius":600  
           }  
        }  
     }  
  }  
}
```
```Swift
struct Empty: Codable {
   let response: Response
}
struct Response: Codable {
   let group: Group
}
struct Group: Codable {
   let results: [Result]
   let totalResults: Int
}
struct Result: Codable {
   let venue: Venue
}
struct Venue: Codable {
   let id, name: String
   let contact: Contact
   let location: Location
   let categories: [Category]
   let verified: Bool
   let dislike, ok: Bool
   let beenHere: BeenHere
}
struct BeenHere: Codable {
   let count, lastCheckinExpiredAt: Int
   let marked: Bool
   let unconfirmedCount: Int
}
struct Category: Codable {
   let id, name, pluralName, shortName: String
   let primary: Bool
}
struct Contact: Codable {
}
struct Location: Codable {
   let address: String
   let lat, lng: Double
   let distance: Int
   let postalCode, cc, city, state: String
   let country: String
   let formattedAddress: [String]
}
```
  • Swift

    13237 questions

    Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る