博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swift iOS : 解析json
阅读量:6300 次
发布时间:2019-06-22

本文共 2550 字,大约阅读时间需要 8 分钟。

典型的前台后台的交互操作,几乎都是这样的:

  1. 访问后台服务API
  2. 然后解析它返回的JSON

使用Alamofire,它的扩展AlamofireObjectMapper可以把HTTP访问获得的结果转换为json对象,使用ObjectMapper可以把json对象和swift对象做一个映射。

如下案例,访问cnodejs.org提供的API,并转换返回json为swift对象,并且打印验证:

import UIKitimport Alamofireimport AlamofireObjectMapperimport ObjectMapper@UIApplicationMainclass AppDelegate: UIResponder, UIApplicationDelegate,URLSessionDelegate {    var window: UIWindow?    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {        foo()        return true    }    func foo(){        let URL = "https://cnodejs.org/api/v1/topics?page=2"        Alamofire.request(URL).responseObject { (response: DataResponse
) in let topics = response.result.value print(topics?.success) print(topics?.data?.count) if let item = topics?.data { for it in item { print(it.id) print(it.author?.avatar_url) print(it.tab) return } } } }}class Topics: Mappable { var success: Bool? var data : [Topic]? required init?(map: Map){ } func mapping(map: Map) { success <- map["success"] data <- map["data"] }}//content title last_reply_at good top reply_count visit_count create_at author{loginname,avatar_url}class Author : Mappable{ var loginname: String? var avatar_url: String? required init?(map: Map){ } func mapping(map: Map) { loginname <- map["loginname"] avatar_url <- map["avatar_url"] }}class Topic: Mappable { var id: String? var author_id : String? var tab : String? var content : String? var title : String? var last_reply_at : String? var good : String? var top : String? var reply_count : String? var visit_count : String? var create_at : String? var author : Author? required init?(map: Map){ } func mapping(map: Map) { id <- map["id"] author_id <- map["author_id"] content <- map["content"] title <- map["title"] last_reply_at <- map["last_reply_at"] good <- map["good"] top <- map["top"] reply_count <- map["reply_count"] visit_count <- map["visit_count"] create_at <- map["create_at"] author <- map["author"] tab <- map["tab"] }}复制代码

如果打印结果形如:

Optional(true)Optional(40)Optional("5989cd6c2d4b0af475035399")Optional("59603478a4de5625080fe1cd")Optional("ask")复制代码

说明代码正常运作。

转载地址:http://uzwxa.baihongyu.com/

你可能感兴趣的文章
idea springboot热部署无效问题
查看>>
第八章 进程间通信
查看>>
HttpSession接口中的方法(Jsp中的session类的用法)
查看>>
「镁客早报」AI可预测心脏病人死亡时间;机器人开始在美国送外卖
查看>>
MoQ(基于.net3.5,c#3.0的mock框架)简单介绍
查看>>
物联网全面升级,十年内推动工业进入智能化新阶段
查看>>
spring-通过ListFactory注入List
查看>>
一种基于SDR实现的被动GSM嗅探
查看>>
阿里云ECS每天一件事D1:配置SSH
查看>>
SQL Server 性能调优(性能基线)
查看>>
uva 10801 - Lift Hopping(最短路Dijkstra)
查看>>
[Java Web]servlet/filter/listener/interceptor区别与联系
查看>>
POJ 2312Battle City(BFS-priority_queue 或者是建图spfa)
查看>>
从零开始学MVC3——创建项目
查看>>
CentOS 7 巨大变动之 firewalld 取代 iptables
查看>>
延时任务和定时任务
查看>>
linux下的权限问题
查看>>
教你如何使用Flutter和原生App混合开发
查看>>
Spring Boot 整合redis
查看>>
CSS hover改变背景图片过渡动画生硬
查看>>