gpt4 book ai didi

ios - iOS playground do 方法中的 Json 解析不解析

转载 作者:搜寻专家 更新时间:2023-11-01 07:24:00 25 4
gpt4 key购买 nike

我正在尝试根据 json 中的标签将一些 json 数据解析为三个不同的数组。我似乎被卡住了,不知道为什么我的 for 循环从未被输入过。我是 iOS 的新手,正在使用它来快速学习。任何帮助将不胜感激。这是我正在使用的代码:

var myPicture = [String]()
var myPath = [String]()
var mylabel = [String]()


let jsonString = "[{\"picture\" : \"Picture 1 \", \"path\": \"Path 1\" , \"label\" : \"Label 1\"}]"
//Convert jsonString to NSData
let myData = jsonString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!

do{

let promoJson = try NSJSONSerialization.JSONObjectWithData(myData, options:.AllowFragments)

if let promtions = promoJson[""] as? [[String: AnyObject]] {

for promtions in promtions {

if let picture = promtions["picture"] as? String
{
myPicture.append(picture)

if let path = promtions["path"] as? String
{
myPath.append(path)

if let label = promtions["label"] as? String
{
mylabel.append(label)

}

}
}
}

}

}catch {
print("Error with Json: \(error)")
}
print(myPicture.first)
print(myPath.first)
print(mylabel.first)

打印的结果都是零。所以没有任何内容被附加到数组

最佳答案

if let promtions = promoJson[""] 部分将不起作用,而且无论如何也无用。这只是您必须转换为字典数组的 promoJson

你离解决方案不远了,看看我的代码工作版本:

do {
let promoJson = try NSJSONSerialization.JSONObjectWithData(myData, options: [])
if let promtions = promoJson as? [[String: AnyObject]] {
for promtion in promtions {
if let picture = promtion["picture"] as? String {
myPicture.append(picture)
}
if let path = promtion["path"] as? String {
myPath.append(path)
}
if let label = promtion["label"] as? String {
mylabel.append(label)
}
}
}
} catch let error as NSError {
print(error.debugDescription)
}

备选

既然问题已解决,让我建议您另一种方法:不要使用单独的数组来存储数据,而是使用一个对象数组来保存数据。

例如,创建这样的结构:

struct Promotion {
let picture: String
let path: String
let label: String
}

以及这个结构实例的数组:

var myPromotions = [Promotion]()

现在我们可以解码 JSON,从中创建对象,然后将它们存储在数组中:

do {
let promoJson = try NSJSONSerialization.JSONObjectWithData(myData, options: [])
if let promtions = promoJson as? [[String: AnyObject]] {
for promtion in promtions {
if let picture = promtion["picture"] as? String,
path = promtion["path"] as? String,
label = promtion["label"] as? String {
let promo = Promotion(picture: picture, path: path, label: label)
myPromotions.append(promo)
}
}
}
} catch let error as NSError {
print(error.debugDescription)
}

现在看数组的内容,很方便:

for promo in myPromotions {
print(promo.label)
print(promo.path)
print(promo.picture)
}

关于ios - iOS playground do 方法中的 Json 解析不解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37151241/

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