Tag: json

Swift中的JSON(De)Serialization

现在,我已经启动并运行了Node.js服务器,接下来我将继续研究应用程序的客户端。 我必须解决的第一个任务是进行API调用和处理JSON响应。 在本文中,我将引导您完成代码以完成此任务。 第一步是创建可JSONifiable的类。 值得庆幸的是,很多功能是预先内置在swift中的。 在这里,我将使用JSONEncoder和JSONDecoder处理对象的序列化和反序列化。 我添加了两个函数来封装它,encode()可以将一个对象转换为可以传输到服务器的JSON数据,decode()可以将数据转换为Swift对象。 您可以在下面看到如何使用它的示例。 下一部分将使用此Transmittable协议使用JSON主体对服务器进行API调用,并接收和处理响应数据。 这个APICaller类的主要功能是对服务器上的端点执行API调用。 该函数采用一个端点(“ / users”),一个方法(“ POST”),一个请求主体(一个User对象)以及响应类型(User.self)。 它调用createURLRequest()来格式化URLRequest对象。 然后,它使用URLSession调用后端。 接下来,我们检查HTTP响应代码。 除200(或200s之外的其他任何代码)之外的任何代码均表示呼叫成功通过了网络,但是服务器引发了错误。 如果所有检查都通过,我们将反序列化服务器返回的数据并调用完成处理程序。 在上面的示例中,我们使用User对象主体对/ users端点进行POST调用。 在这种情况下,我们还将在服务器的响应中返回User对象。 希望这对您的项目有所帮助。 始终欢迎提出问题,评论和更正。

验证您的移动应用程序依赖的内部API响应

跟踪内部API的更改并不总是那么容易。 在开发过程中,当每个人都被淹没,有据可查,有针对性的更改仍然可能使API用户感到惊讶。 为了轻松跟踪内部API的更改,某种自动的API响应监视器将很有帮助。 JSON模式 JSON模式定义了JSON响应的模式。 我们使用ajv来验证我们的模式。 为了帮助入门,我建议使用tuts +教程,在这里您可以找到有关JSON Schema的关键功能的出色介绍。 除了本文提到的内容外,我还有一些其他提示: 使用模式生成器-JSON模式非常冗长。 如果您对验证的响应很大,那么手写模式可能非常繁琐。 尝试json-schema-generator。 它仅支持JSON Schema规范的草案4(截至2018年5月6日)。 手动转换为最新草案应易于管理(迁移指南)。 安装ajv的命令行界面(ajv-cli)以通过终端运行ajv。 白名单方法—为了跟踪JSON密钥的添加和删除,我的架构被定义为将现有密钥列表列入白名单。 如果有新密钥或删除了现有密钥,则验证失败。 下面的要点说明了这种方法。 您可以安排测试每小时进行一次(如果您注册付费帐户,则可以进行更高频率的测试)。 我对断言非常满意。 它可以验证API响应,同时可以兼作API状态和性能监视器。 这是一个巨大的安全网!

Codables…….yaaay !!!!

Codables –是节省大量时间和节省生命的工具。 当我们必须从网络调用中获取数据并保存到对象或结构以在应用程序中显示数据时,我们必须经历很多这样的过程。 与实时应用程序相比,这是一个相对较小的json结构,用于澄清我的意思,让我们看一下我用于解析的json数据: 因此,与实时数据相比,这确实很小,想象一下当您拥有如下数据时进行解析: 我知道它很大,所以Codables作为超级保护者来了。 因此,让我们看一下使用codables而不是常规解析,我向您保证 就是这样,哦,是的,您可能已经注意到只有一行代码可以完成所有工作: 您可能想知道的是,什么是“ WeatherArray”,它不过是经协议确认的结构,如下所示。 WeatherArray包含Weather对象数组,啊哈! 让我们看看天气: 什么!!!,为什么我以这种方式创建对象? 您唯一需要强调的就是创建确认json架构的对象。 正是我所做的,以上结构实际上证实了以下json架构。 因此,请继续尝试制作可编码对象,以确认不同的json体系结构。 发表评论…如果您有任何困难,我可以帮助您😇 注意:我真的很抱歉图像大小,我将在下一篇文章中进行整理。

使用SwiftyJSONModel在Swift中输入安全的JSON

原始发布在这里: https://gist.github.com/alickbass/b0683c175d6078d2a3bdb4ca005f56da 到处都是JSON 现在,每个应用都非常依赖通过互联网传输数据。 无需解释😉。 而且,当然,最受欢迎的格式是JSON。 在Swift和Objective-C我们需要先解析JSON,然后将其映射到本机对象,然后再使用它。 让我们更具体地考虑以下示例: 删除样板代码 。 因此,现在编译器知道我们使用了什么枚举,因此现在无需直接执行PropertyKey.hobbies.rawValue就可以使用: .hobbies就是这样。 密钥现在是类型安全的 。 这意味着我们不再可以将随机原始字符串用作JSON键。 我们仅限于我们的PropertyKey enum并且当我们尝试使用无效键时,编译器将给我们编译时错误。 看起来不错! 这仅仅是开始! 推断返回类型 除了类型安全键之外,我们不再需要编写stringValue , intValue等。框架知道在执行操作时应返回哪些类型 : 让firstName:字符串 您已经指定firstName为String 。 所以现在代替 : firstName = json [PropertyKey.firstName.rawValue] .stringValue 无需指定stringValue , 现在您可以编写以下代码 : firstName =试试object.value(for:.firstName) 这消除了我们使用Apple的方法进行转换时以及单独使用SwiftyJSON时获得的许多烦人的样板。 但这还不是全部。 现在,对于数组,我们不需要显式映射并转换为特定类型 。 所以代替 : 爱好= json [PropertyKey.height.rawValue] .arrayValue.map({$ 0.stringValue}) 现在我们要做的是 : 爱好=尝试object.value(for:.hobbies) 它的作用与常规String相同。 […]

SmartBaby:JSON到Swift可编码模型

SmartBaby是一个Mac应用程序,可帮助您从JSON推断Swift Codable模型以节省时间。 如果您有一个响应为JSON的API,则可以使用SmartBaby节省大量时间来创建模型类型。 只需将JSON粘贴到SmartBaby,它将推断并生成Codable模型供您复制。 使用右侧的选项面板,您可以更改有关模型的一些元信息,甚至可以使用功能强大的地图来自定义生成的模型。 请注意,SmartBaby会将嵌套的JSON推断为嵌套模型。 另外,如果可以,SmartBaby将推断字符串为URL(或日期)。 您可以更改模型的名称,添加初始化程序,更改twitter的id的类型,使url为可选等等。 玩吧。 在左侧的列表面板中,您可以检查所有模型。 通过更改模型的“ 项目名称” ,您可以将它们与项目组进行组织。 如果模型太多,请按模型名称搜索以找到所需的模型。 您所有的模型都将通过CloudKit保存到私有数据库中的iCloud。 您几乎需要了解有关SmartBaby的所有信息。 您现在可以在Mac App Store上获得它。 https://itunes.apple.com/us/app/smartbaby/id1438971945?mt=12 您可以为它评分或在使用后对其进行评论。 🐣 如果喜欢,请推荐给您的同事或朋友。 🔥 欢迎反馈! Twitter:@nixzhu,电子邮件:zhuhongxu@gmail.com

JSONParserSwift框架,用于Swift的JSON解析器

服务器以黑白格式(即所有字符串)发送所有JSON数据,并且我们努力按照模型类将其类型转换为各自的数据类型。 现在,在服务器数据和我们的代码之间提供了JSONParserSwift框架,可根据我们的模型类将这些字符串神奇地转换为所需的各个数据类型,而无需编写任何代码。 JSONParserSwift可通过CocoaPods获得。 要安装它,只需将以下行添加到您的Podfile中: 播客“ JSONParserSwift” 要将任何JSON字符串或字典解析为模型,您必须创建一个类并通过ParsableModel对其进行子类ParsableModel 。 现在,您将需要在模型类中创建属性。 您可以使用与json字符串中的键相同或不同的名称来创建这些属性。 如果声明与json中的键同名的属性,则只需声明属性。 但是,如果要为属性和键使用不同的名称,则需要遵循协议JSONKeyCoder并实现方法func key(for key: String) -> String? 如果您必须解析以下JSON字符串: { “ responseStatus”:{ “ statusCode”:101, “ message”:“错误消息” }, “ responseData”:{ “ employeeId”:1002, “ employeeName”:“ Demo Employee”, “ employeeEmail”:“ abc@def.com”, “ employeeDepartment”:“ IT” } } 您将需要如下创建模型: class BaseResponse:ParsableModel { var responseStatus:ResponseStatus? var responseData:员工? }类别ResponseStatus:ParsableModel { var statusCode:NSNumber? var讯息:字串? […]

如何使用Codable在Swift 4中下载和解析Google Place JSON响应

作者的注释: 对我来说重要的是,本教程应尽可能易于遵循。 如果您有帮助实现此目标的建议,请直接与我联系。 对于新的iOS开发人员而言,网络可能是最令人困惑和困难的主题之一。 好消息! 在Swift 4中,下载和解析JSON比以往任何时候都容易,而且您可以使用清晰易懂的100%本机代码来做到这一点! 您可以通过以下方法从Google地方信息下载和解析JSON。 一旦您了解了这一点,我相信您将能够从任何地方的任何JSON下载和解析信息。 JSON基础: JSON响应由key:value对组成。 键将始终为字符串类型。 值的类型可以是:字符串,数字,布尔值,数组,对象或null。 数组用方括号([])表示。 对象用大括号({})表示。 看一下您的源中的样本JSON。 在本练习中,我们的来源是Google地方信息。 识别应用程序所需的JSON字段是关键,因此您可以使对象简洁明了。 对于本练习,我想展示如何解析来自各种不同JSON情况的数据,除了标准键值关系外,还包括数组和嵌套对象。 这是示例JSON中的一项: 2. 创建一系列符合Codable的结构。 这些结构将保存我们从JSON读取的值。 可编码结构的基本结构: 符合编码 包含一个或多个常量,这些常量将保存从JSON读取的值 包含符合String&Coding Key的枚举。 枚举将在JSON键和您的常量之间建立连接。 我建议将这些结构放在自己的Swift文件中。 为了我们的目的,我们将该文件称为ResponseModels.swift。 GooglePlacesResponse结构 //一种。 我们正在使结构符合Codable。 // b。 我们将把结果保存在Place类型的对象数组中。 //C。 我们使用枚举来确保Codable知道从JSON读取的适当密钥。 在这种情况下,我们的results数组对应于JSON中的键“结果” (图1,一级) 。 放置结构 //一种。 完成Place结构后,我们将创建Location结构。 // b。 在我们的JSON中,有些地方有开放时间,有些没有。 因此,我们将此对象标记为可选。 如果您指示Codable搜索不存在的密钥,并且您的常量未标记为可选,则您将无法成功解码JSON并且不会收到任何结果。 //C。 在这里,我们将遍历JSON中的数组,并返回一个或多个自定义结构的值。 // d。 在这种情况下,我们的常量名与JSON中的键名不匹配。 […]

可编码—改进解码JSON的4种方法

Swift 4中引入的Codable提供了一种方便,轻松的方式来编码和解码JSON。 但是,并不是所有的东西都开箱即用。 Swift 4中引入的Codable提供了一种方便,轻松的方式来编码和解码JSON。 但是,并不是所有的东西都开箱即用。 例如,让我们看一下Twitter中的JSON文件。 作为JSON解码器工作方式的结果,我们看到: 引用和标准推文使用相似但不完全相同的字段。 转换为属性名称的键不遵循Swift约定。 日期不是采用标准的接受格式。 颜色的格式不受任何Color类 (UIColor,NSColor等)接受。 因此,我们将学习如何为某些特殊情况设置您的Codable类型。 具体来说,我们将研究: 对可编码类型使用协议 不同的属性名称和键 属性值中的日期 自定义类型的属性值 要继续学习,您可以在GitHub上查看本文的Xcode游乐场。 JSONDecoder的工作方式 这些是JSONDecoder如何将JSON转换为结构化类型的基本规则: 属性名称按原样转换。 默认情况下,简单属性值将转换为String , Int或Double 遵循正确格式的属性值可以解码为URL , Data或Date 。 任何属性值都可以认为是Optional 方括号[]值将转换为Array 花括号{}值将转换为Dictionary或自定义类型。 所有需要解码的类型都需要实现Decodable协议。 同样,需要编码的类型需要实现可编码协议。 如果需要同时对类型进行解码和编码,则可以简单地实现Codable。 在这种情况下,我们将查看为一条推文返回的Twitter JSON数据。 因此, 我们要做的第一件事就是为每种返回的数据类型创建一些基本结构 。 结果,您可以在仓库的此分支上查看解码工作的第一步。 即使数据相似,我们也会创建单独的结构以提供更大的灵活性。 但是,这并不意味着我们不能使用协议来简化功能中这些类型的使用。 将协议与可编码一起使用 例如,在Twitter API中,始终使用tweet的概念。 举例来说,他们的JSON有一条主推文和一条引号 。 因此,可能倾向于对两者使用相同的结构。 但是,更好的方法是两个单独的结构: public struct Tweet:可编码{ public […]

JSON和Swift:简介

JSON是一种很棒的文件格式,可以方便且串行地传输数据。 对于那些不熟悉Swift和API的人,这可能是您第一次与JSON进行交互。 如果您不熟悉Swift语言,本文将作为介绍,以及解析JSON的指南。 重要的是要注意,Xcode中使用了一个新的,最近更新的版本。 但是,仍然建议您了解并熟悉旧模型。 不管您使用哪种方法,JSON的奇迹都使您可以接收和使用许多有组织的代码。 毫无疑问,当您继续使用Swift(尤其是API)时,您将变得对JSON非常熟悉。 请留意本文的第2部分,其中我深入了解了Swift 4和Xcode 9引入的JSON处理的最新更新。

CuteBaby:用于Swift的JSON模型生成器

CuteBaby可以从JSON字符串生成Swift模型(结构或类)。 它具有一些不错的功能,可以自定义生成的模型。 它可以从JSON推断属性的类型,例如String,Int,Double,URL和Date。 它可以处理嵌套的JSON,它将生成嵌套的模型。 它支持Swift 4中的Codable。 您可以使用Property Map指定属性名称,使用Array Object Map指定数组的对象名称,使用Property Type Map指定属性的类型 ,或者使用Enum Properties指定枚举的定义。 它还可以处理数组根JSON,它将自动合并数组中对象的属性。 它可以使用漂亮的格式格式化JSON。 它可以从URL加载JSON。 您可以拖放文本文件来创建新项目。 对于JSON: { “ id”:42 “ name”:“ nixzhu”, “推特”: { “ profile_url”:“ https://twitter.com/nixzhu”, “ created_at”:“ 2009-05-12T10:25:43.511Z” } } 它将生成Swift代码(使用Codable ): struct用户:可编码{ let id:整数 命名:字符串 struct Twitter:可编码{ 让profileURL:URL 让createdAt:日期 私有枚举CodingKeys:字符串,CodingKey { case profileURL =“ profile_url” case createdAt =“ created_at” […]