Я делаю приложение для гольфа, написанное в Swift. Внутри моего приложения у меня есть панель поиска, где пользователь может искать поле для гольфа. У меня есть большой JSON-файл в Xcode, содержащий большую базу данных для гольфа. Я разбираю эту базу данных JSON, чтобы дать мне название и местоположение полей для гольфа, а затем отобразить их, когда пользователь ищет в строке поиска. Проблема заключается в том, что файл JSON имеет размер 17 МБ и имеет примерно 18 000 полей для гольфа, что делает процесс синтаксического анализа длинным, и имена полей для гольфа не начинаются, когда пользователь начинает вводить текст в строку поиска примерно до 6 секунд.большой JSON файл Swift
В настоящее время у меня есть класс DataManager, который идет и захватывает мой файл JSON. Я использую SwiftyJSON, чтобы помочь разобрать данные, а затем добавить эти данные в массив, чтобы я мог отображать его в виде таблицы таблицы поиска.
Любые предложения о том, как ускорить процесс синтаксического анализа такого большого файла или уменьшить размер файла?
Заранее благодарен!
-кода для моего менеджера данных и моей функции, которая разбирает мой JSON файл:
DataManager:
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":"$26 wknd",
"adv_tee":"7 days",
"FIELD33":""
},
Являются ли данные JSON только именем и расположением или есть другие данные? Не могли бы вы разобраться с более простой структурой, просто с данными, которые вам нужны немедленно? Не могли бы вы включить образец JSON? – ColGraff
Есть другие данные, но мне нужны только три поля. – dcotter