当父母和孩子有相同的数据时,如何使用 Alamofire 解析数据?

Posted

技术标签:

【中文标题】当父母和孩子有相同的数据时,如何使用 Alamofire 解析数据?【英文标题】:How to parse data using Alamofire when parent and child have same data? 【发布时间】:2018-11-07 15:26:53 【问题描述】:

我正在使用 Alamofire 调用和解析 json 数据,但问题是响应不正确。 parent 和 child 具有相同的数据,因此解析器在解析中更改了 id,并且项目数量减少了。下面的数据是我要使用模型解析的json


"error": false,
"message": "",
"data": [
    
        "id": 1,
        "parent_id": null,
        "name": "Ink Cartridge",
        "notes": null,
        "children": [
            
                "id": 5,
                "parent_id": 1,
                "name": "Colored",
                "notes": null
            
        ]
    ,
    
        "id": 2,
        "parent_id": null,
        "name": "Toner Cartridge",
        "notes": null,
        "children": []
    ,
    
        "id": 3,
        "parent_id": null,
        "name": "Combo",
        "notes": null,
        "children": []
    ,
    
        "id": 4,
        "parent_id": null,
        "name": "Combo Set",
        "notes": null,
        "children": []
    
]

我正在使用这个 Alamofire 和 SwiftyJSON 库

Alamofire.request(ServerAPI.getCategories()).responseJSON  (responseData) -> Void in
        if((responseData.result.value) != nil) 
            let swiftyJsonVar = JSON(responseData.result.value!)
            print(swiftyJsonVar)
        
    

【问题讨论】:

【参考方案1】:

试试这个,你应该使用 Codable,因为它使这更容易。 构建这些结构,父结构使用常量名称遍历数据,例如 let id,将为您提供数据的“id”部分。然后我构建了另一个结构,这样当它通过子结构时,它会在内部使用该结构做同样的事情。

  struct Parent: Codable 

   let id: Int
   let parent_id: Int?
   let name: String
   let notes: String?
   let children: [Child]?

  

  struct Child: Codable 

      let id: Int
      let parent_id: Int?
      let name: String
      let notes: String?
  

那么你需要一个 var 来保存这些数据:

 var completeData = [Parent]()

在您的电话中:

      do 
let dataParsed = try JSONDecoder().decode([Parent].self, from: data
 self.completeData = dataParsed

 catch 
print(error)

要访问它,你应该能够做到

var accessingID = self.completeData[0].id

对于孩子:

var accessingChild = self.completeData[0].children.id

我不确定你想要数据的方式,所以你可能想搞乱处理数组的方式,我无法测试,但应该是这样的。

如果值可能为空,请记住在结构中您需要使用?。这种方法也没有使用 Alamofire 或 SwiftyJSON,因为 Codable 使得使用 structs 做这种事情更加快捷方便。

【讨论】:

以上是关于当父母和孩子有相同的数据时,如何使用 Alamofire 解析数据?的主要内容,如果未能解决你的问题,请参考以下文章

当孩子依赖父母,父母依赖孩子时,浏览器如何计算宽度

当父母和孩子都写入标准输出时,输出中没有交错

NSManagedObjectContext - 当父母改变时如何更新孩子?

触发孩子时如何更改父母的值?

如何在可扩展的listview android中将孩子添加到特定的父母

根据父母的边界半径裁剪孩子