swift、Alamofire、SwiftyJSON:如何解析 arrayObject

Posted

技术标签:

【中文标题】swift、Alamofire、SwiftyJSON:如何解析 arrayObject【英文标题】:swift, Alamofire, SwiftyJSON : How to parsing arrayObject 【发布时间】:2017-05-31 23:21:23 【问题描述】:

我不知道如何使用 SwiftyJSON.JSON 制作 Array 我可以使用 SwiftyJSON.JSON 解析结构,但我无法解析对象数组。 请帮帮我。

JSON


  "result": 
    "list": [
      
        "categoryId": 1,
        "categoryNm": "main_1",
        "subCategoryList": [
          
            "categoryId": 2,
            "categoryNm": "sub_1_1"
          ,
          
            "categoryId": 4,
            "categoryNm": "sub_1_2"
          ,
          
            "categoryId": 5,
            "categoryNm": "sub_1_3"
          ,
          
            "categoryId": 6,
            "categoryNm": "sub_1_4"
          ,
          
            "categoryId": 28,
            "categoryNm": "sub_1_5"
          
        ]
      ,
      
        "categoryId": 7,
        "categoryNm": "main_2",
        "subCategoryList": [
          
            "categoryId": 9,
            "categoryNm": "sub_2_1"
          ,
          
            "categoryId": 10,
            "categoryNm": "sub_2_2"
          ,
          
            "categoryId": 11,
            "categoryNm": "sub_2_3"
          
        ]
      
    ]
  

模型.swift

struct Model 
    public let list: Array<Category>
    public init?(json: JSON) 
        self.list = json["list"].arrayObject as! Array<Category>
    


struct Category 
    public let categoryId: NSInteger
    public let categoryNm: NSString
    public let subCategoryList: Array<SubCategory>
    public init?(json: JSON) 
        self.categoryId = json["categoryId"].intValue as NSInteger
        self.categoryNm = json["categoryNm"].stringValue as NSString
        self.subCategoryList = json["subCategoryList"].arrayObject as! Array<SubCategory>
    


struct SubCategory 
    public let categoryId: NSInteger
    public let categoryNm: NSString
    public init?(json: JSON) 
        self.categoryId = json["categoryId"].intValue as NSInteger
        self.categoryNm = json["categoryNm"].stringValue as NSString
    

ViewController.swift

override func viewDidLoad() 
    super.viewDidLoad()
    ...
    switch response.result 
        case .success(let value):
            let json = JSON(value)
            let resultModel = Model.init(json: json["result"])
        case .failure(let error):
            print(error)
        

我不知道如何使用 SwiftyJSON.JSON 制作 Array 我可以使用 SwiftyJSON.JSON 解析结构,但我无法解析对象数组。 请帮帮我。

【问题讨论】:

【参考方案1】:

以下代码将 my.json 文件解析为一个类别和子类别的数组

声明categories数组

var categories = [Category]()

打开您的文件并创建一个JSON 对象

let path = Bundle.main.path(forResource: "my", ofType: "json")!
let jsonData = NSData.init(contentsOfFile: path)
let json = JSON(data: jsonData! as Data)

创建categories 并将它们附加到数组中

for categoryArray in json["result"]["list"].array! 
    guard let category = Category(json: categoryArray) else  continue 
    categories.append(category)

print(categories)

声明Category结构如下

struct Category 
    public let categoryId: NSInteger
    public var subCategories = [SubCategory]()
    public init?(json: JSON) 
        self.categoryId = json["categoryId"].intValue as NSInteger
        self.categoryNm = json["categoryNm"].stringValue as NSString
        for subCategory in json["subCategoryList"].array! 
            subCategories.append(SubCategory(json: subCategory)!)
        
    

【讨论】:

以上是关于swift、Alamofire、SwiftyJSON:如何解析 arrayObject的主要内容,如果未能解决你的问题,请参考以下文章

Alamofire 自定义响应从 Alamofire v1.3 迁移到 3.0(和 Swift 2 语法)

Alamofire 在 Swift 3、Xcode 8 中出现错误

swift Alamofire+ObjectMapper——swift(学习九)

Swift:Alamofire 文档

导入 Alamofire.swift 不起作用

Alamofire 奇怪的 JSON 前缀 - Swift 2.0