使用搜索字符串解析本地 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 文件的主要内容,如果未能解决你的问题,请参考以下文章

跪求 一个Android 里一个本地Json文件的解析,要完

Flutter 从本地化 JSON 文件解析数组

jsonpath解析

json解析失败怎么解决?

GoLang -- json文件操作

下载 JSON 文件,但解析显示不可读的字符 [重复]