gpt4 book ai didi

json - 由于其格式而无法正确解析 JSON 数据?

转载 作者:行者123 更新时间:2023-11-30 13:54:54 24 4
gpt4 key购买 nike

我正在尝试解析如下数据: enter image description here

看起来每条记录都是连续的。0、1、2,然后在每条记录中都有很多键值对,例如名称或 showID。

我想进入每条记录并只获取某些对,例如名称、showID 和日期。

这是我的代码,我不确定 for item in 循环中的模式应该是什么

换句话说,如何将特定字段放入空字典数组中?

    let task = NSURLSession.sharedSession().dataTaskWithURL(url) { (data, response, error) -> Void in

if let urlContent = data
{
do
{
var jsonResult:NSDictionary = try NSJSONSerialization.JSONObjectWithData(urlContent, options: NSJSONReadingOptions.MutableContainers) as! NSDictionary

if let items = jsonResult["items"] as! NSArray?
{
var emptyArrayOfDictionary = [[String : AnyObject]]()

for item in 0...jsonResult.count
{

}
}

最佳答案

这个想法是创建一个包含所需属性的结构(或类),使用字典中的值的初始值设定项创建。

假设您想要创建包含节目名称和节目 ID 的“节目”对象。

您可以创建这样的结构:

struct Show {
let name:String
let showID:Int
init?(dictionary: [String:AnyObject]) {
guard let name = dictionary["name"] as? String,
let showID = dictionary["showID"] as? Int else {
return nil
}
self.name = name
self.showID = showID
}
}

然后迭代你的字典并将每个字典传递给结构初始值设定项,如下所示:

let task = NSURLSession.sharedSession().dataTaskWithURL(url) { (data, response, error) -> Void in

if let urlContent = data {
do {
if let jsonResult = try NSJSONSerialization.JSONObjectWithData(urlContent, options: []) as? [String : AnyObject] {

if let items = jsonResult["items"] as? [[String : AnyObject]] {

let shows = items.flatMap { Show(dictionary: $0) }

}

}
} catch {
print(error)
}
}

}

结构初始值设定项是可选的,这意味着如果字典不包含键“name”或“showID”,它将不会创建对象并返回 nil;这就是为什么我们使用 flatMap 来迭代而不是 map (因为 flatMap 解开了可选值)。

现在您有了一个对象数组 shows,您可以使用 Swift 方法(如 sortfilter)轻松过滤或排序其内容等

shows 数组中的每个对象都是一个 Show 对象,并且具有带有数据的 nameshowID 属性你的字典。

flatMap 的作用是通过迭代(如循环)初始数组来创建 Show 对象的数组。在这一行:

let shows = items.flatMap { Show(dictionary: $0) }

$0 表示当前数组元素。这意味着,对于 items 数组中的每个元素,我们使用它创建一个新的 Show 实例,并将生成的对象数组放入常量 显示

还有经常使用的map,但是这里我们的Show结构体的init是一个可选的init,所以它返回一个Optional Show,以及flatMap 知道如何处理这个问题(它将安全地解开可选值并忽略 nil 值),而 map 则不知道。

关于json - 由于其格式而无法正确解析 JSON 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33751895/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com