如何使用来自JSON文件的信息填充数组并计算距离?

我有一个JSON文件在这里:

{ "People": [{ "A1": "New York", "B1": "ShoppingMall1", "C1": "43.0757", "D1": "23.6172" }, { "A1": "London", "B1": "ShoppingMall2", "C1": "44.0757", "D1": "24.6172" }, { "A1": "Paris", "B1": "ShoppingMall3", "C1": "45.0757", "D1": "25.6172" }, { "A1": "Bern", "B1": "ShoppingMall4", "C1": "41.0757", "D1": "21.6172" }, { "A1": "Sofia", "B1": "ShoppingMall5", "C1": "46.0757", "D1": "26.6172" } ] } 

并从这个JSON文件我必须采取商场的名称和坐标,并填充到一个数组中。 这个数组我想在Table View Cells中使用。 主要想法是计算用户当前位置附近最近的商场。 在这里,我计算用户的当前位置。

 @IBAction func LocateMe(sender: AnyObject) { manager.delegate = self manager.desiredAccuracy = kCLLocationAccuracyBest manager.requestWhenInUseAuthorization() manager.startUpdatingLocation() } func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { let userlocation: CLLocation = locations[0] as CLLocation manager.stopUpdatingLocation() let location = CLLocationCoordinate2D(latitude: userlocation.coordinate.latitude, longitude: userlocation.coordinate.longitude) let span = MKCoordinateSpanMake(0.5, 0.5) let region = MKCoordinateRegion(center: location, span: span) } let distanceMeters = userlocation.distanceFromLocation(CLLocation(latitude: ??,longitude: ??)) let distanceKilometers = distanceMeters / 1000.00 let roundedDistanceKilometers = String(Double(round(100 * distanceKilometers) / 100)) + " km" 

但我不知道如何把所有的商场坐标和比较他们。我也不知道如何填充他们到一个数组,我需要使用表视图单元格。我是新的迅速,我会很高兴如果有人能帮助我。

我一直在处理你的问题,这是我的结果,

首先,我build议你使用一个像SwiftyJSON这样的JSON framework ,但是我不使用它,因为我不知道你是否愿意,所以

首先我们需要使用这个代码加载我们的json

 let pathForPlist = NSBundle.mainBundle().pathForResource("JSON", ofType: "json")! let JSONData = NSData(contentsOfFile: pathForPlist) 

之后我们需要parsing这些数据并转换成JSONObject

 let JSONObject = try NSJSONSerialization.JSONObjectWithData(JSONData!, options: NSJSONReadingOptions.MutableContainers) as! [String:AnyObject] 

并转换为正确的对象使用来自Dictionary的初始化器,请注意,我们使用NSJSONReadingOptions.MutableContainers因为我们的json是一个字典数组

这是完整的代码,请注意,我为您的数据types定义了一个名为ObjectShop的类,以帮助稍后进行计算

 import UIKit import MapKit class ObjectShop { var A1 = "" var B1 = "" var C1 = "" var D1 = "" init?(dict:[String:AnyObject]) { A1 = dict["A1"] as! String B1 = dict["B1"] as! String C1 = dict["C1"] as! String D1 = dict["D1"] as! String } func getCoordenate2D() -> CLLocationCoordinate2D { return CLLocationCoordinate2D(latitude: Double(self.C1)!, longitude: Double(self.D1)!) } } class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. let pathForPlist = NSBundle.mainBundle().pathForResource("JSON", ofType: "json")! let JSONData = NSData(contentsOfFile: pathForPlist) do { var objects = [ObjectShop]() let JSONObject = try NSJSONSerialization.JSONObjectWithData(JSONData!, options: NSJSONReadingOptions.MutableContainers) as! [String:AnyObject] print(JSONObject) for dic in JSONObject["People"] as! [[String:AnyObject]] { print(dic) let objc = ObjectShop(dict: dic) objects.append(objc!) } for object in objects { print(object.getCoordenate2D()) } } catch _ { } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } } 

我希望这可以帮助你,让我知道如果你有任何问题