草庐IT

json - 如何使用 Decodable 解码 JSON 数组?

我正在请求API向我发送一些我可以成功检索的数据,但我在解码过程中卡住了。这是我收到的JSON:[{"challenge_id":1,"challenge_title":"newchallenge1","challenge_pts_earned":1000,"challenge_description":"description1","start_date":"2017-09-24T00:00:00.000Z","end_date":"2017-09-24T00:00:00.000Z","challenge_category_id":1,"status_id":2,"createdAt

json - 如何轻松查看符合 `Codable` 协议(protocol)的对象的 JSON 输出

我处理许多对象,这些对象使用Codable协议(protocol)序列化/反序列化为JSON。创建JSONEncoder并不难,将其设置为pretty-print,将对象转换为JSON,然后将其转换为字符串,但似乎有很多工作要做。有没有一种简单的方法可以说“请给我看这个对象的JSON输出?”编辑:例如我有以下结构:structFoo:Codable{letstring1:String?letstring2:String?letdate:Dateletval:IntletaBar:Bar}structBar:Codable{letname:String}假设我创建了一个Foo对象:let

ios - 使用 Codable 从 2 个不同的 JSON 文件实例化单个类而不使用选项

我正在使用提供2个JSONURL的API。每个URL都包含一个嵌套容器,其中包含属于同一类和对象的不同属性。JSON网址1{"last_updated":1535936629,"xyz":5,"data":{"dataList":[{"id":"42","a1":"a1value","a2":"a2value",},//,,,]}}JSON网址2{"last_updated":1536639996,"xyz":5,"data":{"dataList":[{"id":"42","lat":"12.345","lon":"67.890",},//,,,]}}我想使用这些JSONURLS使用

swift - 泛型类型 'T' 不符合协议(protocol) 'Encodable'

我正在尝试快速使用泛型来解释http响应。所有Json响应在顶部都有相同的签名:{"request":"foo","result":"[{},{}....]}所以我正在使用这个:publicstructHttpResponse{publicletrequest:Bool?publicletresult:DATA?enumCodingKeys:String,CodingKey{caserequest="request"caseresult="result"}..在我的网络层:finalclassNetwork{funcgetItems(_path:String)->Observable>

swift - 为什么我的特殊 Codable 协议(protocol)与 Swift 的 Codable with Array 的工作方式不同?

使用Codable,我可以创建以下扩展extensionDecodable{publicstaticfuncdecode(data:Data,decoder:JSONDecoder=.default)->Self?{do{returntrydecoder.decode(self,from:data)}catchleterrorasNSError{CodableKit.log(message:"\(error.userInfo)")returnnil}}}并将其用于单个对象和数组类型,例如letperson=Person.decode(data:personData)//singlele

ios - 参数类型不符合 Encodable

我正在尝试为POST请求创建结构。据我所知,该结构符合Codable类型别名,但我一直收到错误Argumenttype'RegisterUserRequest.Type'doesnotconformtoexpectedtype'Encodable'"whenpassingitinasaparametertomyJSONEncoder.我试图只遵循Encodable,编写建议的必需init(),但似乎没有任何效果。这是我的Struct的样子structRegisterUserRequest:Codable{varfirstName:StringvarlastName:Stringvare

swift - 同时从 API 调用和模型文件解码 Codable 结构

我目前正在做一个项目,我正在调用一个web服务,它返回一个JSON,我使用Codable解析它,就像这样:我的结构:structUser:Codable{varname:Stringvarage:Int}API响应:{"name":"Romiro","age":27}解码代码:letdecoded=try!JSONDecoder().decode(User.self,from:data)我们决定通过添加新字段来扩展User信息:structUser:Codable{varname:Stringvarage:Intvardetail:Detail}structDetail:Codable

swift - 如果我想从 Codable 中排除一些属性,为什么这些属性必须是可选的?

我有以下结构structChecklist:Codable{letid:Int64vartext:String?varchecked:Boolvarvisible:Boolvarversion:Int64privateenumCodingKeys:String,CodingKey{caseidcasetextcasechecked}}但是,我遇到了编译错误Type'Checklist'doesnotconformtoprotocol'Decodable'我能解决的唯一方法是将排除的属性更改为可选。structChecklist:Codable{letid:Int64vartext:St

ios - 无法使用类型为 'decode' 的参数列表调用 '(T, from: Data)'

我正在尝试创建一个函数,该函数根据传递给它的自定义JSON模型接收类型为“Codable”的参数。错误:Cannotinvoke'decode'withanargumentlistoftype'(T,from:Data)'发生在解码行,这里是函数:staticfuncupdateDataModels(url:serverUrl,type:T,completionHandler:@escaping(_details:Codable?)->Void){guardleturl=URL(string:url.rawValue)else{return}URLSession.shared.data

ios - 如何对 Codable 的所有属性使用 decodeIfPresent?

如何使Codable类对所有属性使用decodeIfPresent而无需在自定义初始化程序中键入所有属性?一个例子:classBook:Codable{varname:String="Defaultname"varpages:Int=1requiredinit(fromdecoder:Decoder)throws{letcontainer=trydecoder.container(keyedBy:CodingKeys.self)forkeyincontainer.allKeys{//WhattodoheretocalldecodeIfPresent?}}}本质上,我想自己复制自动创建的