使用搜索字符串解析本地 JSON 文件
Posted
技术标签:
【中文标题】使用搜索字符串解析本地 JSON 文件【英文标题】:Parsing local JSON file with search String 【发布时间】:2019-11-21 12:34:23 【问题描述】:真的需要你的帮助。
我正在尝试(城市列表),我想取回与我的搜索字符串相关的一组选择性数据,即我输入城市名称,并从 JSON 文件中取回与字符串匹配的城市列表。
通常当数据在网络上时,只需在URL中添加一个查询参数就可以很容易地进行这样的操作,但是在解析本地JSON文件时我不知道该怎么做。
这是我解析整个文件的代码:
guard let filePath = Bundle.main.path(forResource: "cityList", ofType: "json") else
fatalError("Failed to create path to cityList file")
let fileURL = URL(fileURLWithPath: filePath)
do
let jsonData = try Data(contentsOf: fileURL)
let cityList = try JSONDecoder().decode([City].self, from: jsonData)
print(cityList[0].name)
catch
print(error)
我希望我不必解析整个文件,因为它非常大,然后将搜索应用于我从解析中返回的结果数据数组。
【问题讨论】:
那里没有问题,我只是不知道如何从 json 文件中只获取某些城市的列表,而不是列表中所有城市的列表,如json 文件很大。 【参考方案1】:只需filter
数组
let query = "New"
let filteredCities = cityList.filter$0.name.range(of: query, options: .caseInsensitive) != nil)
此语法过滤名称中包含new
(不区分大小写)的所有城市。
如果您想过滤以new
开始 的城市,请添加.anchored
选项
let filteredCities = cityList.filter$0.name.range(of: query, options: [.caseInsensitive, .anchored]) != nil)
Bundle
中有一个 API url(forResource:withExtension:)
会返回一个 URL
【讨论】:
谢谢你的回复好先生,但正如我所说,我只想从原始json文件中检索某些城市列表,而不是检索整个城市列表,然后过滤掉城市我需要,原因是 json 文件只包含大量数据。 @Gideon 这对文件来说是不可能的 - 您需要阅读整个文件才能知道您要搜索的数据是否在其中。 感谢您的回复,所以最好从json文件中提取所有数据并以其他格式存储,以便尽可能减少搜索时间?跨度>以上是关于使用搜索字符串解析本地 JSON 文件的主要内容,如果未能解决你的问题,请参考以下文章