描述:SwiftyJSON是一个swift编写的对json数据进行解析的类库,SwiftyJSON的使用极其方便,而且不用担心数组越界等问题

GitHub地址:https://github.com/SwiftyJSON/SwiftyJSON

在本文写作时,SwiftyJSON在GitHub上的star已经达到了14899,光看star就知道,这个库,还是比较值得用的。

1.cocoapods导入并安装

pod "SwiftyJSON"

2.在使用的文件中导入头文件

import SwiftyJSON

3.获取要解析的数据(此时为写死的假数据,实际使用的应该是通过API获取的数据或者其他途径获取的数据,此数据的结构为真实项目的数据结构,所以,解析方式也会以该项目的后续解析方式进行解析,基本能满足一般的项目的数据解析需求)

var jsonData: [String: Any] = [:]
jsonData["code"] = 200
jsonData["result"] = true
jsonData["message"] = "数据加载成功"
jsonData["data"] = [["id"           : "资讯1_id","title"        : "资讯1_标题","pictrueUrl"   : "资讯1_图片","description"  : "资讯1_描述","categoryTitle": "资讯1_分类标题","tagArray"     : [["id":"yyy0bb1d82beb084718bbd88d45c39710d8","title":".net1"],["id":"eee0bb1d82beb084718bbd88d45c39710d8","title":".net1"]],"shareNumber"  : 1,"clickNumber"  : 1],["id"           : "资讯2_id","title"        : "资讯2_标题","pictrueUrl"   : "资讯2_图片","description"  : "资讯2_描述","categoryTitle": "资讯2_分类标题","tagArray"     : [["id":"yyy0bb1d82beb084718bbd88d45c39710d8","title":".net2"],["id":"eee0bb1d82beb084718bbd88d45c39710d8","title":".net2"]],"shareNumber"  : 2,"clickNumber"  : 2]]

4.创建JSON对象

let jsonObj = JSON.init(jsonData)

5.先判断code与result


if jsonObj["result"].boolValue == false {print("获取失败")return
}
if jsonObj["code"].intValue != 200 {
/// 此处应该是根据服务器返回的code值进行判断然后进行后续操作,现在只是简单的打印服务器返回的messageprint(jsonObj["message"].stringValue)return
}

6.解析数据主体,暂时将解析的数据均打印出来,实际使用中会对数据进行其他操作

for dic in jsonObj["data"].arrayValue {print("id: ", dic["id"].stringValue)print("title: ", dic["title"].stringValue)print("pictrueUrl: ", dic["pictrueUrl"].stringValue)print("description: ", dic["description"].stringValue)print("categoryTitle: ", dic["categoryTitle"].stringValue)print("shareNumber: ", dic["shareNumber"].intValue)print("clickNumber: ", dic["clickNumber"].intValue)print("tagArray: ", dic["tagArray1"].arrayValue)for arr in dic["tagArray"].arrayValue {print("\t\ttagid: ", arr["id2"].stringValue)print("\t\ttitle: ", arr["title"].stringValue)}
}

7.打印的结果

打印结果

8.总结
SwiftyJSON的使用很简单
首先根据要解析的数据进行创建对象,然后解析数据

创建JSON对象的方式有很多,如下

/**方法一: 使用data数据创建一个JSON对象- parameter data:  用来解析的数据,data类型- parameter opt:   JSON解析的选项. 默认`.AllowFragments`.- parameter error: 用来返回错误的NSErrorPointer. 默认为`nil`.- returns: 创建的JSON对象*/public init(data:Data, options opt: JSONSerialization.ReadingOptions = .allowFragments, error: NSErrorPointer = nil)/**方法二:使用json字符串创建一个JSON对象- parameter string: 一个正常的json字符串,例如 '{"a":"b"}'- returns: 创建的JSON对象*/public static func parse(_ string:String) -> JSON/**方法三:使用一个对象创建一个JSON对象- parameter object:  这个对象必须有以下特性: 所有的对象是 NSString/String, NSNumber/Int/Float/Double/Bool, NSArray/Array, NSDictionary/Dictionary, 或 NSNull; 所有的字典的键是 NSStrings/String; NSNumbers 不允许是 NaN 或者 infinity.- returns: 创建的JSON对象*/public init(_ object: Any)/**方法四:用一个JSON对象的数组创建一个JSON对象- parameter jsonArray: 一个Swift数组,数组的元素为JSON对象- returns: 创建的JSON对象*/public init(_ jsonArray:[JSON])/**方法五:用一个值为JSON对象的字典创建一个JSON对象- parameter jsonDictionary: 一个Swif字典,字典的值是JSON对象- returns: 创建的JSON对象*/public init(_ jsonDictionary:[String: JSON])

解析的数据类型包括(除了URL与null,其余的每种数据类型都包括有可选值和默认值,如果需要自定义默认值,可以使用解析结果为可选的类型,如果不需要,可以直接使用默认值,所有带有默认值的类型,都是在以Value为后缀。例如,string获取的就是可选的字符串,而stringValue获取的就是带有默认值的字符串,非可选):

public var double: Double?
public var doubleValue: Double
public var float: Float?
public var floatValue: Float
public var int: Int?
public var intValue: Int
public var uInt: UInt?
public var uIntValue: UInt
public var int8: Int8?
public var int8Value: Int8
public var uInt8: UInt8?
public var uInt8Value: UInt8
public var int16: Int16?
public var int16Value: Int16
public var uInt16: UInt16?
public var uInt16Value: UInt16
public var int32: Int32?
public var int32Value: Int32
public var uInt32: UInt32?
public var uInt32Value: UInt32
public var int64: Int64?
public var int64Value: Int64
public var uInt64: UInt64?
public var uInt64Value: UInt64public var URL: URL?public var null: NSNull?public var numberValue: NSNumber
public var number: NSNumber?public var stringValue: String
public var string: String?public var boolValue: Bool
public var bool: Bool?public var dictionaryObject: [String : Any]?
public var dictionaryValue: [String : JSON]
public var dictionary: [String : JSON]?public var arrayObject: [Any]?
public var arrayValue: [JSON]
public var array: [JSON]?

结束:
在文章的结束,放上一段我练习用的代码,基本就是把上面的步骤结合在一起


import UIKit
import SwiftyJSONclass SwiftyJSONViewController: UIViewController {override func viewDidLoad() {super.viewDidLoad()view.backgroundColor = UIColor.whitetitle = "SwiftyJSON"}private var jsonData: [String: Any] = [:]@IBAction func prepareJsonData(_ sender: UIButton) {jsonData["code"] = 200jsonData["result"] = truejsonData["message"] = "数据加载成功"jsonData["data"] = [["id"           : "资讯1_id","title"        : "资讯1_标题","pictrueUrl"   : "资讯1_图片","description"  : "资讯1_描述","categoryTitle": "资讯1_分类标题","tagArray"     : [["id":"yyy0bb1d82beb084718bbd88d45c39710d8","title":".net1"],["id":"eee0bb1d82beb084718bbd88d45c39710d8","title":".net1"]],"shareNumber"  : 1,"clickNumber"  : 1],["id"           : "资讯2_id","title"        : "资讯2_标题","pictrueUrl"   : "资讯2_图片","description"  : "资讯2_描述","categoryTitle": "资讯2_分类标题","tagArray"     : [["id":"yyy0bb1d82beb084718bbd88d45c39710d8","title":".net2"],["id":"eee0bb1d82beb084718bbd88d45c39710d8","title":".net2"]],"shareNumber"  : 2,"clickNumber"  : 2]]}@IBAction func analysisJsonData(_ sender: UIButton) {let jsonObj = JSON.init(jsonData)if jsonObj["result"].boolValue == false {print("获取失败")return}if jsonObj["code"].intValue != 200 {print(jsonObj["message"].stringValue)return}print(jsonObj["message"].stringValue)for dic in jsonObj["data"].arrayValue {print("id: ", dic["id"].stringValue)print("title: ", dic["title"].stringValue)print("pictrueUrl: ", dic["pictrueUrl"].stringValue)print("description: ", dic["description"].stringValue)print("categoryTitle: ", dic["categoryTitle"].stringValue)print("shareNumber: ", dic["shareNumber"].intValue)print("clickNumber: ", dic["clickNumber"].intValue)print("tagArray: ", dic["tagArray1"].arrayValue)for arr in dic["tagArray"].arrayValue {print("\t\ttagid: ", arr["id2"].stringValue)print("\t\ttitle: ", arr["title"].stringValue)}}}
}

各位,别人为我们造了轮子,我们可以直接拿来用,但是,我们不应该只是会拿来用,在自己不忙的时候,研究一下别人写的好代码,尝试着写一点自己的轮子,我相信,那会比学会使用轮子更让人兴奋!!!

链接:https://www.jianshu.com/p/293c16132d0a

SwiftyJSON相关推荐

  1. swift_036(Swift之第三方库SwiftyJSON篇)

    [快速学会Swift第三方库] SwiftyJSON篇 SwiftyJSON使得用Swift处理JSON数据更加容易.这是解析JSON字符串封装类.实现功能与JavaScript中的JSON.pars ...

  2. 在 Swift 语言中更好的处理 JSON 数据:SwiftyJSON

    SwiftyJSON能够让在Swift语言中更加简便处理JSON数据. With SwiftyJSON all you have to do is: ? 1 2 3 4 let json = JSON ...

  3. 使用SwiftyJSON解析JSON

    因为Swift对于类型有非常严格的控制,它在处理JSON时是挺麻烦的,因为它天生就是隐式类型.SwiftyJSON是一个能帮助我们在Swift中使用JSON的开源类库.开始之前,让我们先看一下在Swi ...

  4. [绍棠_Swift] SwiftyJSON的使用详解(附样例,用于JSON数据处理)

    1,SwiftyJSON介绍与配置 SwiftyJSON是个使用Swift语言编写的开源库,可以让我们很方便地处理JSON数据(解析数据.生成数据). GitHub地址:https://github. ...

  5. iOS(Swift)学习笔记之SwiftyJSON的使用

    本文为原创文章,转载请标明出处 1. 通过CocoaPods安装SwiftyJSON platform :ios, '10.0'target '<Your Target Name>' do ...

  6. Swift - SwiftyJSON的使用详解(附样例,用于JSON数据处理)

    转自:http://www.hangge.com/blog/cache/detail_968.html Swift - SwiftyJSON的使用详解(附样例,用于JSON数据处理) 2016-01- ...

  7. SwiftyJSON库的使用和思考

    转载于:http://swiftist.org/topics/124#2 最近看了一些网络请求的例子,发现Swift在解析JSON数据时特别别扭,总是要写一大堆的downcast(as?)和可选(Op ...

  8. 25.SwiftyJSON转换JSON的注意

    在Swift当中, 如果我们需要解析JSON数据的话, 我们需要用上一堆代码才能解析, 而且解析之后还不一定可以正常运行, 这里提供一个第三方的SwiftyJSON, 可以防止我们在解析JSON数据的 ...

  9. swift:使用NSJSONSerialization和SwiftyJSON两种方法解析网络返回的json格式数据

    在我的博客(下面)两个实验的基础上,使用NSJSONSerialization和SwiftyJSON两种方法解析网络返回的json格式数据,参照视频实现的"天气信息"小实验 1 创 ...

  10. Xcode报错:No such module SwiftyJSON

    2019独角兽企业重金招聘Python工程师标准>>> SwiftyJSON 是一款很棒的 Swift 语言第三方库,主要处理JSON数据,作者是ThoughtWorks的工程师傅若 ...

最新文章

  1. UVa 11059 - Maximum Product
  2. python解决四舍五入问题
  3. USACO1.3.4 Prime Cryptarithm 牛式 解题报告(模拟)
  4. Altium designer中元器件库(SCHLIB)元件引脚上文字(标号)大小及距离边缘位置设置
  5. Java多线程(四)之ConcurrentSkipListMap深入分析
  6. AGC004E - Salvage Robots(dp,思维)
  7. linux 网络dma驱动,S3C2410的Linux下DMA驱动程序开发
  8. c语言limits.h_ (limits.h)C ++中(整数类型的大小)的宏常量
  9. 如何手撸一个队列?队列详解和面试题汇总(含答案)
  10. dj电商-项目开发流程
  11. ecshop操作数据库类
  12. JAVA输出1 10与5相乘的结果_完美起航-用java数组展示计算机的多位数相乘
  13. go redis 序列化_求求你不要手写Redis缓存
  14. cms 移动根节点到根节点中的子节点,根节点消失解决办法
  15. 04748JAVA语言程序设计实践考试复习
  16. html 图片滑动验证码,html+jQuery实现拖动滑块图片拼图验证码插件【移动端适用】...
  17. Echarts中饼状图显示百分比
  18. Istio:Mixer功能架构与实践
  19. sata电源定义 联想小4pin_SATA硬盘15针供电接口的引脚定义
  20. 第八章:加载Maya2011模型

热门文章

  1. docker配置阿里云镜像加速器
  2. Js中字符串转Json与Json对象转字符串
  3. [ArcPy百科]第一节:何为arcpy
  4. python提取停用词_python文本处理 数据挖掘 停用词检索
  5. 算法笔记(一)(教你系统学习基础算法)
  6. 2013Esri全球用户大会QA之Web GIS
  7. 调试bootmgrwinload vistawin7 x86x64
  8. 【黑苹果】联想ThinkPad X1 Carbon 2016+i5 6200U+MacOS10.15.7 EFI文件下载
  9. XX系统性能测试报告模板
  10. 分享个B端竞品分析报告