私はGoogleのジオロケーターAPIを使用して自動的にいくつかのものをマッピングしています。リクエストでJSON文字列を返しますが、解析するのが難しいです。私はフレディとSwiftyJSONのようなものを試しましたが、私が望むフィールドを抽出することはできません。ここでSwift JSON Parsing - フィールドにアクセスできません/返りません
は、私のコードのサンプルです:ここで
func sendJsonRequest(ConnectionString: String,
HTTPMethod : HttpMethod = HttpMethod.Get,
JsonHeaders : [String : String] = [ : ],
JsonString: String = "") -> NSData? {
// create the request & response
let request = NSMutableURLRequest(URL: NSURL(string: ConnectionString)!, cachePolicy: NSURLRequestCachePolicy.ReloadIgnoringLocalCacheData, timeoutInterval: 5)
// create some JSON data and configure the request
let jsonString = JsonString;
request.HTTPBody = jsonString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)
// handle both get and post
request.HTTPMethod = HTTPMethod.rawValue
// we'll always be sending json so this is fine
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
// add the headers. If there aren't any then that's ok
for item in JsonHeaders {
request.addValue(item.1, forHTTPHeaderField: item.0)
}
print("Request:")
print(request)
let session = NSURLSession.sharedSession()
var data : NSData?
var urlTask = session.dataTaskWithRequest(request) { (Data, Response, Error) in
data = Data
}
urlTask.resume()
while (data == nil) {
}
return data
}
// return the coordinates of a given location
func getCoordinates() -> Coordinates {
var result = Coordinates()
let ConnectionString = "https://maps.googleapis.com/maps/api/geocode/json?address=43201"
let jsondata = sendJsonRequest(ConnectionString)
let data = jsondata
let json = JSON(data!)
print(json)
return result
}
getCoordinates()
は、私は別のJSONクライアントから取得していた出力の例です:
{
"results": [
{
"address_components": [
{
"long_name": "43201",
"short_name": "43201",
"types": [
"postal_code"
]
},
{
"long_name": "Columbus",
"short_name": "Columbus",
"types": [
"locality",
"political"
]
},
{
"long_name": "Franklin County",
"short_name": "Franklin County",
"types": [
"administrative_area_level_2",
"political"
]
},
{
"long_name": "Ohio",
"short_name": "OH",
"types": [
"administrative_area_level_1",
"political"
]
},
{
"long_name": "United States",
"short_name": "US",
"types": [
"country",
"political"
]
}
],
"formatted_address": "Columbus, OH 43201, USA",
"geometry": {
"bounds": {
"northeast": {
"lat": 40.011147,
"lng": -82.9723898
},
"southwest": {
"lat": 39.976962,
"lng": -83.0250691
}
},
"location": {
"lat": 39.9929821,
"lng": -83.00122100000002
},
"location_type": "APPROXIMATE",
"viewport": {
"northeast": {
"lat": 40.011147,
"lng": -82.9723898
},
"southwest": {
"lat": 39.976962,
"lng": -83.0250691
}
}
},
"place_id": "ChIJ9Rz24rWOOIgR3EEuL2Ge4oo",
"types": [
"postal_code"
]
}
],
"status": "OK"
}
私は、フィールドの結果を取得しようとしています.geometry.location。 Freddy JSON解析ライブラリを使用して結果フィールドを取得できましたが、ジオメトリフィールドにアクセスできませんでした。私が間違っているかどうかを誰かが見てみることができますか? SwiftyJSONはJSONを解析することさえできません。
チップをありがとう!残念ながら、これは私のjson構文解析の問題を解決するものではありませんが、コールバックでそのデータをUIに戻すことができることを知ってうれしいです。 –
@FKunecke、私は解析を修正して答えを更新しました。あなたのメソッドは、遊び場ではよりよく見えるかもしれませんが、実生活では、あなたの実装は、アプリケーションのUIがフリーズする原因となるメインスレッドをブロックします。 –