我正在提取一个JSON数组字典,试图将它们添加到我创建的类中,并将它们用于UITableView
。 JSON看起来像这样:
{
"inventory":[
{
"item":"item 1",
"description":"item 1 description",
"quantityOnHand":"42",
"supplier_id":"1",
"supplierName":"Supplier 1"
},
{
"item":"item 2",
"description":"item 2 description",
"quantityOnHand":"1001",
"supplier_id":"1",
"supplierName":"Supplier 1"
} ...
依旧......
我在我的viewDidLoad()
中抓住了所有这些并尝试将每个字典添加到一个类(称为Inventory
)以便稍后使用。这是我在序列化JSON的地方:
override func viewDidLoad() {
super.viewDidLoad()
let urlString = "my url to json data";
let session = NSURLSession.sharedSession();
let url = NSURL(string: urlString)!;
session.dataTaskWithURL(url) { (data: NSData?, response:NSURLResponse?, error: NSError?) -> Void in
if let responseData = data {
do {
let json = try NSJSONSerialization.JSONObjectWithData(responseData, options: NSJSONReadingOptions.AllowFragments)
print(json) //this prints out the above formatted json
if let dict = json as? Dictionary<String, AnyObject> {
print(dict["inventory"]![0]!["description"]);
print(dict["inventory"]![0]!["item"]);
print(dict["inventory"]![0]!["quantityOnHand"]);
}
} catch {
print("Could not serialize");
}
}
}.resume()
}
我可以使用类似print(dict["inventory"]![0]!["description"]);
的内容打印出每个值,但这似乎效率低下。
我是否需要一个用于计算字典数量的for循环?还是for (key, value)
循环?事实上,它是一个名为inventory
的数组中的一堆字典真的让我失望。如果它是JSON返回键:单个字典中的值对,我想我可以自己解决它。将json["inventory"]
放入变量后,我有点担心要做什么。
答案 0 :(得分:1)
首先将JSON序列化转换为有意义的内容,
在这种情况下Dictionary<String, AnyObject>
let json = try NSJSONSerialization.JSONObjectWithData(responseData, options: NSJSONReadingOptions.AllowFragments) as! Dictionary<String, AnyObject>
然后检索字典数组,JSON字符串显示它只包含String
种类型。
let inventoryArray = dict["inventory"] as! [Dictionary<String, String>]
如果inventory
是可选的,请使用可选绑定
if let inventoryArray = dict["inventory"] as? [Dictionary<String, String>] { }
现在你可以通过一个简单的循环获取数组中的项目,不需要任何类型的转换。
for anItem in inventoryArray {
print("description:", anItem["description"])
print("item: ", anItem["item"])
print("quantityOnHand: ", anItem["quantityOnHand"])
}