gpt4 book ai didi

ios - 将 JSON 转换为自定义对象时出错

转载 作者:行者123 更新时间:2023-11-29 01:35:12 25 4
gpt4 key购买 nike

我有一个模糊的错误。

我尝试使用自定义对象反序列化字典。但它不起作用。

let decodedJson = try! NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments) as! Dictionary<String, TestCast>

我的对象是(我用 Objective-C 对象进行了测试,但结果相同)

class TestCast: NSObject {

var ca:String?
var resultat:String?
var remuneration:String?
var delta_ca:String?
var delta_resultat:String?
var delta_remuneration:String?

}

我的 json 是:

{
"201310": {
"resultat": 0,
"delta_resultat": "0.00",
"delta_remuneration": "0.00",
"ca": 0,
"remuneration": 0,
"delta_ca": "0.00"
},
"201311": {
"resultat": 0,
"delta_resultat": "0.00",
"delta_remuneration": "0.00",
"ca": 0,
"remuneration": 0,
"delta_ca": "0.00"
},
"201312": {
"resultat": 0,
"delta_resultat": "0.00",
"delta_remuneration": "0.00",
"ca": 0,
"remuneration": 0,
"delta_ca": "0.00"
},
"201401": {
"resultat": 0,
"delta_resultat": "0.00",
"delta_remuneration": "0.00",
"ca": 0,
"remuneration": 0,
"delta_ca": "0.00"
},
"201402": {
"resultat": 0,
"delta_resultat": "0.00",
"delta_remuneration": "0.00",
"ca": 0,
"remuneration": 0,
"delta_ca": "0.00"
},
"201403": {
"resultat": 0,
"delta_resultat": "0.00",
"delta_remuneration": "0.00",
"ca": 0,
"remuneration": 0,
"delta_ca": "0.00"
},
"201404": {
"resultat": 0,
"delta_resultat": "0.00",
"delta_remuneration": "0.00",
"ca": 0,
"remuneration": 0,
"delta_ca": "0.00"
},
"201405": {
"resultat": 0,
"delta_resultat": "0.00",
"delta_remuneration": "0.00",
"ca": 0,
"remuneration": 0,
"delta_ca": "0.00"
},
"201406": {
"resultat": 0,
"delta_resultat": "0.00",
"delta_remuneration": "0.00",
"ca": 0,
"remuneration": 0,
"delta_ca": "0.00"
},
"201407": {
"resultat": 0,
"delta_resultat": "0.00",
"delta_remuneration": "0.00",
"ca": 0,
"remuneration": 0,
"delta_ca": "0.00"
},
"201408": {
"resultat": 0,
"delta_resultat": "0.00",
"delta_remuneration": "0.00",
"ca": 0,
"remuneration": 0,
"delta_ca": "0.00"
},
"201409": {
"resultat": 0,
"delta_resultat": "0.00",
"delta_remuneration": "0.00",
"ca": 0,
"remuneration": 0,
"delta_ca": "0.00"
},
"201410": {
"resultat": 3938.33,
"delta_resultat": "3,938.33",
"delta_remuneration": "-2,700.00",
"ca": 3938.33,
"remuneration": 2700,
"delta_ca": "3,938.33"
},
"201411": {
"resultat": 3938.33,
"delta_resultat": "0.00",
"delta_remuneration": "0.00",
"ca": 3938.33,
"remuneration": 2700,
"delta_ca": "0.00"
},
"201412": {
"resultat": 34211.1,
"delta_resultat": "30,272.77",
"delta_remuneration": "0.00",
"ca": 34211.1,
"remuneration": 2700,
"delta_ca": "30,272.77"
},
"201501": {
"resultat": 7812.89,
"delta_resultat": "-26,398.21",
"delta_remuneration": "2,700.00",
"ca": 13500,
"remuneration": 0,
"delta_ca": "-20,711.10"
},
"201502": {
"resultat": -20195.54,
"delta_resultat": "-28,008.43",
"delta_remuneration": "0.00",
"ca": 5700,
"remuneration": 0,
"delta_ca": "-7,800.00"
},
"201503": {
"resultat": 2379.71,
"delta_resultat": "22,575.25",
"delta_remuneration": "0.00",
"ca": 4650,
"remuneration": 0,
"delta_ca": "-1,050.00"
},
"201504": {
"resultat": 14582.38,
"delta_resultat": "12,202.67",
"delta_remuneration": "0.00",
"ca": 16500,
"remuneration": 0,
"delta_ca": "11,850.00"
},
"201505": {
"resultat": 4568.45,
"delta_resultat": "-10,013.93",
"delta_remuneration": "0.00",
"ca": 9200,
"remuneration": 0,
"delta_ca": "-7,300.00"
},
"201506": {
"resultat": 9941.67,
"delta_resultat": "5,373.22",
"delta_remuneration": "-49.60",
"ca": 12349.67,
"remuneration": 49.6,
"delta_ca": "3,149.67"
},
"201507": {
"resultat": 8138.53,
"delta_resultat": "-1,803.14",
"delta_remuneration": "-90.40",
"ca": 13526.67,
"remuneration": 140,
"delta_ca": "1,177.00"
},
"201508": {
"resultat": 3321.47,
"delta_resultat": "-4,817.06",
"delta_remuneration": "140.00",
"ca": 4500,
"remuneration": 0,
"delta_ca": "-9,026.67"
},
"201509": {
"resultat": -2454.47,
"delta_resultat": "-5,775.94",
"delta_remuneration": "-23.00",
"ca": 0,
"remuneration": 23,
"delta_ca": "-4,500.00"
}}

我有一个错误:

Could not cast value of type '__NSCFDictionary' (0x104f04ef0) to 'Pulse.TestCast'

最佳答案

将字典数组类型转换为类不会自动使用字典数据创建此类的实例...

您必须为您的类创建一个初始化程序,该初始化程序将 JSON 中的字典作为参数来初始化具有正确类型的值。

例子:

class TestCast: NSObject {
var ca:Int?
var resultat:Double?
var remuneration:Int?
var delta_ca:String?
var delta_resultat:String?
var delta_remuneration:String?
init(dictionary: [String:AnyObject]) {
self.ca = dictionary["ca"] as? Int
self.resultat = dictionary["resultat"] as? Double
self.delta_resultat = dictionary["delta_resultat"] as? String
self.delta_ca = dictionary["delta_ca"] as? String
self.remuneration = dictionary["remuneration"] as? Int
self.delta_remuneration = dictionary["delta_remuneration"] as? String
}
}

do {
if let unwrappedData = data, let json = try NSJSONSerialization.JSONObjectWithData(unwrappedData, options: []) as? [String:[String:AnyObject]] {
let casts = json.map { TestCast(dictionary: $1) }
// here `casts` is an array of TestCast objects
}
} catch let error as NSError {
print(error.description)
}

关于ios - 将 JSON 转换为自定义对象时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33035104/

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