大 JSON 文件 Swift

large JSON file Swift

我正在制作一个用 Swift 编写的高尔夫应用程序。在我的应用程序中,我有一个搜索栏,用户可以在其中搜索高尔夫球场。我在 Xcode 中有一个大型 JSON 文件,其中包含一个大型高尔夫球场数据库。我解析这个 JSON 数据库,为我提供高尔夫球场的名称和位置,然后在用户在搜索栏中搜索时显示它们。问题是 JSON 文件是 17MB,大约有 18,000 个高尔夫球场,这使得解析过程很长,并且当用户开始在搜索栏中输入时高尔夫球场名称直到大约 6 秒才开始填充.

我目前有一个 DataManager Class,它可以抓取我的 JSON 文件。我正在使用 SwiftyJSON 来帮助解析数据,然后将该数据附加到一个数组中,这样我就可以在搜索栏的 table 视图中显示它。

关于如何加快解析如此大的文件或减小文件大小的任何建议?

提前致谢!

-我的数据管理器代码和解析我的 JSON 文件的函数:

数据管理器:

 class DataManager {

   class func getGolfCoursesFromFileWithSuccess(success: ((data: NSData) -> Void)) {

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {

  let filePath = NSBundle.mainBundle().pathForResource("golfCourseData",ofType:"json")

  var readError:NSError?
  do {
    let data = try NSData(contentsOfFile:filePath!,
      options: NSDataReadingOptions.DataReadingUncached)
    success(data: data)
    } catch let error as NSError {
    readError = error
    print(readError)
     } catch {
      fatalError()
     }
   })
  }
 }

要解析的函数 JSON(在 viewDidLoad 中调用):

 func loadCoursesFromJSONFile() {
    DataManager.getGolfCoursesFromFileWithSuccess { (data) -> Void in
        let json = JSON(data: data)

        if let courseArray = json.array {

            for course in courseArray {

                let golfCourseName: String? = course["biz_name"].string

                if golfCourseName != nil {
                    let golfCourse = GolfCourse(className: "PreviousCourse")
                    golfCourse.courseName = golfCourseName!
                    self.golfCourseCollection.append(golfCourse)
                }
            }
        }
    }
}

JSON的例子:

-我只需要"biz_name","e_city","e_state"

{
     "id":18634,
"biz_name":"Twin Lakes Golf Course",
"e_address":"6100 Clifton Rd",
"e_city":"Clifton",
"e_state":"VA",
"e_postal":"20124",
"e_zip_full":"",
"e_country":"USA",
"loc_county":"Fairfax",
"loc_area_code":703,
"loc_FIPS":51059,
"loc_MSA":null,
"loc_PMSA":8840,
"loc_TZ":"EST",
"loc_DST":"Y",
"loc_LAT_centroid":"38.7803",
"loc_LAT_poly":38.819444,
"loc_LONG_centroid":-77.3913,
"loc_LONG_poly":-77.402822,
"biz_phone":"(703) 631-9372",
"metal_spikes":"U",
"play_five":"U",
"c_holes":"18",
"c_type":"Public",
"year_built":"",
"c_designer":"",
"c_season":"",
"guest_policy":"",
"dress_code":"",
"green_fees":"",
"weekend_rates":" wknd",
"adv_tee":"7 days",
"FIELD33":""

},

"containing a large golf course data base" - 您已经在此处提到关键字:database

不要使用 Json 文件来完成数据库的工作。使用普通的 sqlite 数据库或 fmdb 包装器、realm.io 或 CoreData 或除原始文件以外的其他内容。这样你就可以 运行 更高效的查询,你将不必在内存中保存所有 18k folg 课程等。例如,使用带有搜索谓词的 CoreData 数据库的搜索可能比你只使用 CoreData 数据库更高效对非索引文本数据进行手动搜索。

如果您仍然不相信并且仍想使用 json - 请确保 json 没有经过优化,例如没有不必要的空格、制表符、换行符等