如何搜索非常大的 json 文件?
Posted
技术标签:
【中文标题】如何搜索非常大的 json 文件?【英文标题】:How do I search a very very large json file? 【发布时间】:2016-05-21 23:15:17 【问题描述】:我有一个巨大的 json 文件,我正在尝试从文件中提取信息,但追踪路径的方式太大了。我可以使用 id 过滤它吗? JSON code 我需要选择课程名称,即
let urlString = "Can't provide the url"
if let url = NSURL(string: urlString)
if let data = try? NSData(contentsOfURL: url, options: [])
let json = JSON(data: data)
parseJSON(json)
func parseJSON(json: JSON)
for (index: String, subJson: JSON) in json
【问题讨论】:
看文件就知道走哪条路了?这听起来非常奇怪。有一些在线网站允许您粘贴 JSON,它们会为您提供很好的格式。 这只是一个非常长的json文件,我需要的信息在中间 如果您知道您需要哪些信息,然后在密钥上查找并回溯以获取路径。同样,我建议将其粘贴到 JSON 服务中以使其格式化。 我不得不将 JSON 代码放入谷歌文档中,但我更新了问题。 您要在这个 JSON 文件中具体寻找什么? 【参考方案1】:我想出了一种深度优先的方法,根据谓词查找给定的JSON
对象。
我把它做成了一个扩展:
extension JSON
func find(@noescape predicate: JSON -> Bool) -> JSON?
if predicate(self)
return self
else
if let subJSON = (dictionary?.map $0.1 ?? array)
for json in subJSON
if let foundJSON = json.find(predicate)
return foundJSON
return nil
例如,要搜索具有给定id
字段的JSON
对象,例如在问题中,您可以使用以下方法:
let json = JSON(data: data)
let predicate =
(json: JSON) -> Bool in
if let jsonID = json["id"].string where jsonID == "plnMain_ddlClasses"
return true
return false
let foundJSON = json.find(predicate)
在这种情况下,如果您需要继续并找到您正在寻找的课程,您会希望:
let classes = foundJSON?["children"].arrayValue.map
$0["html"].stringValue
更新 - 查找所有
func findAll(@noescape predicate predicate: JSON -> Bool) -> [JSON]
var json: [JSON] = []
if predicate(self)
json.append(self)
if let subJSON = (dictionary?.map $0.1 ?? array)
// Not using `flatMap` to keep the @noescape attribute
for object in subJSON
json += object.findAll(predicate: predicate)
return json
【讨论】:
我在导入所有“AssignmentClass”时遇到问题。当我做if let jsonID = json["class"].string where jsonID == "AssignmentClass" return true ...
时,我只得到第一个结果(自习室),我明白为什么但仍然不知道如何解决它。
无论哪个 JSON 对象首先满足谓词,都会被返回。如果满足您的谓词的 JSON 在数组中,您可能需要再上一两级。
第二部分看不懂。
您在寻找哪些信息?我会更好地帮助你。
因此,如果您控制 json 页面“AssignmentClass”,那么该数组中应该有 7 个结果,我需要提取类等于 tp“sg-header-heading”的 ["html"]。即第一个应该是"\r\n\t\t\t\t\t0020B - 33 STUDY HALL (INSTRUCT)\r\n\t\t\t\t"
以上是关于如何搜索非常大的 json 文件?的主要内容,如果未能解决你的问题,请参考以下文章