Xcode-将字符串解析为可用的数据结构



我有一个字符串(下面的片段(,通过在这里解析它,我知道它是有效的json。我想要实现的最后一个解析是基于这段PHP代码。当我尝试下面的代码时,我似乎无法保持xcode的快乐,因为我似乎继续制作<Any>的数组,要么得到错误Value of type 'Any' has no subscripts,要么展开一个零

任何关于如何解析这一点的想法都将不胜感激。

if let jsonArray = try JSONSerialization.jsonObject(with: jsonString.data(using: .utf8)!,options : .allowFragments) as? Array<Any> {
let a = jsonArray[0] as? Array<Any>
let a = jsonArray[0] as? Array<Any>
let b =  a?[1] as? Array<Any>
let c = b?[1] as? Array<Array<Any>>
}

代码段-此处为完整字符串

[["comic books",[["","","","","","","","","Ba6eX5HWBc3btAa6mJ_4Cg","0ahUKEwjR7NSWsOHsAhXNLc0KHTrMB68QmBkIAigA",["comic books",0]
]
,["","","","","","","","","Ba6eX5HWBc3btAa6mJ_4Cg","0ahUKEwjR7NSWsOHsAhXNLc0KHTrMB68QmBkIBCgB","","","","",["Ba6eX5HWBc3btAa6mJ_4Cg","0ahUKEwjR7NSWsOHsAhXNLc0KHTrMB68Q8BcIBSgAMAA",["330 Army Trail Rd","Glendale Heights, IL 60139"]
,"",["","","",["https://www.google.com/search?qu003dGot+Comics+Inc,+330+Army+Trail+Rd,+Glendale+Heights,+IL+60139u0026ludocidu003d7330282631276370350#lrdu003d0x880fac8c25bbd32b:0x65ba6537347199ae,1","105 

首先,让我们声明数据类型:

struct Item {
let name: String?
let location: String?
let phone: String?
}

使用SwiftyJSON,您可以很好地将PHP代码转换为以下内容:

var items = [Item]()
if let json = try? JSON(data: jsonData), let arr = json[0][1].array {
for itemArray in arr {
guard let itemDetails = itemArray[14].array else { continue }
let name = itemDetails[11].string
let location = itemDetails[18].string
let phone = itemDetails[178][0][0].string
items.append(Item(name: name, location: location, phone: phone))
}
}

为了好玩,下面是上面代码的一个更短、更实用、可读性更低的实现:

let items = (try? JSON(data: jsonData))?[0][1].array?
.compactMap { $0[14].array }
.map { Item(name: $0[11].string, location: $0[18].string, phone: $0[178][0][0].string) }
?? []

最新更新