ios - 将字典数组转换为对象数组
问题描述
我有一个这种形式的字符串:
[{"LocationsItems":[{"ItemId":4,"LocationId":3,"Qty":34},{"ItemId":19,"LocationId":3,"Qty":55}]}];
我需要将其转换为对象数组,我试过这个:
let data = convertedData.data(using: .utf8)!
do {
if let jsonArray = try JSONSerialization.jsonObject(with: data, options : .allowFragments) as? [Dictionary<String,Any>]
{
print(jsonArray)
} else {
print("bad json")
}
} catch let error as NSError {
print(error)
}
}
并返回 this ,它是一个字典数组:
[["LocationsItems": <__NSArrayI 0x600003a1c100>(
{
ItemId = 4;
LocationId = 3;
Qty = 34;
},
{
ItemId = 19;
LocationId = 3;
Qty = 55;
}
)
]]
我怎样才能从中提取对象?谢谢
解决方案
您可以创建一个LocationItem
.
struct LocationItem {
var itemId: Int?
var locationId: Int?
var qty: Int?
}
var innerDictionary = jsonArray[0] as? [String: Any]
var arrayOfDict = innerDictionary["LocationsItems"] as? [[String: Any]]
var locationsItems = arrayOfDict.map {
LocationItem(itemId: $0["ItemId"], locationId: $0["LocationId"], qty: $0["Qty"])
}
或者,您可以使用Codable
:
struct LocationItem: Codable {
var itemId: Int?
var locationId: Int?
var qty: Int?
enum CodingKeys: String, CodingKey {
case itemId = "ItemId"
case locationId = "LocationId"
case qty = "Qty"
}
}
let decoder = JSONDecoder()
do {
let responseStructure = try decoder.decode([[String:[[String:Any]]]], from: data)
} catch {
// failed
}
let locationItems = responseStructure[0]["LocationsItems"]
推荐阅读
- python - 如何使下一个“for”循环从前一个循环继续循环到字典?
- html - 显示移动视图的桌面视图
- r - 段落在 \text@ 完成之前结束。
\par - flutter - 这是什么意思:“text_painter.dart:断言失败:第 900 行 pos 12:'!_needsLayout':不正确”?
- wordpress - WordPress 查询:仅将规则应用于特定的帖子类型
- excel - 如何在 VBA 中创建和调用函数?
- python - 如何进行组递归特征消除?
- django - 在 request.GET 中同时在 Django 中获取搜索查询和分页
- python - pandas 确定对每行中的非零值有贡献的列标签
- c# - 使用通用列表添加连接服务的 Visual Studio 项目失败