当父母和孩子有相同的数据时,如何使用 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 - 当父母改变时如何更新孩子?