草庐IT

decodable

全部标签

json - decoder.container(keyedBy :) throws DecodingError. typeMismatch 错误。编码错误?

我正在使用Codable协议(protocol)从WebAPI解码JSON。我的此API的Swift数据模型包括类继承(子类)和组合(对象作为其他对象的属性)。在JSON中,相同的属性名称可能表示一个完整的对象,或者表示该对象在数据库中的ID的单个字符串。据我所知,使用Codable处理此类JSON的唯一模式是在对象的初始化器init(fromdecoder:Decoder)中“手动”进行解码>,并首先尝试解码整个对象。如果失败(通过抛出必须捕获的错误),则重试解码与String相同的属性。只要包含varient属性的对象不是另一个Decodable类的子类,这种方法就可以正常工作。在

Swift Init 不符合预期类型 'Decoder'

目前,我有一个符合Codable的结构:publicstructPreference:Codable{publicletid:String}当我尝试使用以下方法初始化对象时:letpreference=Preference(id:"cool")我收到以下错误:Argumenttype'String'doesnotconformtoexpectedtype'Decoder'如何解决此问题并正确初始化结构? 最佳答案 在没有显式初始化器的情况下创建结构publicstructPreference{publicletid:String}它

json - 基于 Swift Decodable 对象属性中的键的模型关系

给定JSON:[{"name":"TV","room":"LivingRoom"},{"name":"LightBulb1","room":"LivingRoom"}]structRoom:Decodable{letname:Stringletdevices:[Device]}structDevice:Decodable{letname:String}如何使用Swift4Decodable解码JSON的方式正确序列化我的模型结构?我想为设备的room属性中的每个唯一字符串创建房间,并将这些设备添加到给定房间的设备列表中。一种方法是在没有房间关系的情况下简单地映射它,然后在我获得整个设备

ios - Swift `Decodable` 不适用于嵌套的 JSON 对象,除非嵌套是一个数组

我已经开始转换一些JSON解析代码以使用新的AppleDecodable协议(protocol),并且遇到了一个感觉太基础的拦截器,在Apple的测试期间不会被遗漏,所以我想知道我是否做傻事。简而言之,我正在尝试解析这样的JSON图,因为我只是在解码,所以我认为符合Decodable应该就足够了,但从错误来看,我需要符合Codable(Decodable&Encodable)以获得所需的解码效果:{"keyString":{"nestedKey1":"value1","nestedKey1":"value1"}}它适用于这种情况:{"keyString":[{"nestedKey1":

ios - NSKeyedUnarchiver decodeObjectForKey :]: cannot decode object of class

我有一个具有多个目标的应用程序(每个目标作为具有不同名称、包标识符等的单独应用程序供另一个客户端使用)。我有方法:fileprivatestaticfuncloadSessionFromKeychain()->UserSession?{ifletsessionData=KeychainWrapper.standard.data(forKey:UserSession.sessionDefaultsKey){print("sessionData:")print(sessionData.debugDescription)ifletsession=NSKeyedUnarchiver.unarc

swift - 可编码 : does not conform to protocol 'Decodable'

无法理解为什么我的类不符合Codable请注意,在我的例子中,我不需要实现方法encode和decode。publicclassLCLAdvantagePlusJackpotCache:Codable{publiclettoken:Stringpublicletamount:NSNumberpublicletmember:Boolpublicinit(token:String,amount:NSNumber,member:Bool){self.token=tokenself.amount=amountself.member=member}enumCodingKeys:String,Co

ios - Swift 可解码 : how to transform one of values during decoding?

默认情况下,Decodable协议(protocol)将JSON值转换为对象值而无需更改。但有时你需要在json解码期间转换值,例如,在JSON中你得到{id="id10"}但在你的类实例中你需要输入数字10进入属性id(或者甚至进入具有不同名称的属性)。您可以实现方法init(from:),您可以在其中使用任何值执行您想要的操作,例如:publicrequiredinit(fromdecoder:Decoder)throws{letcontainer=trydecoder.container(keyedBy:CodingKeys.self)latitude=trycontainer.

swift 3 : Safe way to decode values with NSCoder?

在Swift3之前,您可以像这样使用NSCoder解码bool值:ifletvalue=aDecoder.decodeObjectForKey(TestKey)as?Bool{test=value}Swift3中建议的方法是改用它:aDecoder.decodeBool(forKey:TestKey)但是decodeBool的类引用没有解释如果您正在解码的值实际上不是bool值时如何处理这种情况。您不能在let语句中嵌入decodeBool,因为返回值不是可选的。如何在Swift3中安全地解码值? 最佳答案 我花了很长时间才弄清楚,

python - Unicode解码错误: 'utf8' codec can't decode byte 0xc3 in position 34: unexpected end of data

我正在尝试编写一个scraper,但我遇到了编码问题。当我试图将要查找的字符串复制到我的文本文件中时,python2.7告诉我它无法识别编码,尽管没有特殊字符。不知道这是否有用。我的代码是这样的:fromurllibimportFancyURLopenerimportosclassMyOpener(FancyURLopener):#spoofsarealbrowseronWindowversion='Mozilla/5.0(Windows;U;WindowsNT5.1;it;rv:1.8.1.11)Gecko/20071127Firefox/2.0.0.11'print"Whatist

python - Unicode解码错误: 'ascii' codec can't decode byte 0x8b

我正在使用来自here的以下代码(稍作修改):import_pickleascPickledefunpickle(file):fo=open(file,'rb')dict=cPickle.load(fo)fo.close()returndictunpickle('data_batch_1')当我运行代码时,如果我使用的是Python3.5.2,我会得到以下信息:Traceback(mostrecentcalllast):File"open_batch.py",line10,inunpickle('data_batch_1')File"open_batch.py",line5,inunp