我目前正在构建一个食物跟踪器iOS应用程序(使用swift 2),我希望有一个数据库,其中包含存储在应用程序中的所有食物(及其信息),并且可以访问。
这个想法是,当一些人添加一个冰淇淋'他们的饭,他的卡路里/糖/脂肪'柜台'增加冰淇淋各自的营养价值。 (以便稍后可以处理此数据)
我找到了一个似乎是JSON格式的食物数据库(见下文),但我不知道如何使用swift处理所有这些数据,以便我可以访问特定成分中的卡路里数量。 / p>
到目前为止,我试过这个:
let url = NSURL(string: "myURL")
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithURL(url!, completionHandler: { (data, response, error) -> Void in
if error != nil {
print(error)
} else {
let jsonResult = (try! NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers)) as! NSDictionary
print(jsonResult)
}
})
task.resume()
}
它允许我将JSON格式处理成我可以访问的字典,但我需要(我认为)可能是数组字典,我无法使其与JSON格式一起工作我吼道。
[
{
"Description": "Juice",
"Energy(kcal)Per 100 g": 29,
},
{
"Description": "Alcoholic beverage, daiquiri, canned",
"Energy(kcal)Per 100 g": 125,
}
...
]
我承认我的问题一开始并不是很清楚(我真的很新,我道歉)但我确实试图在发布之前在Stackoverflow上研究它,但我还没有找到一些东西这适用于我的情况。再次抱歉,非常感谢您抽出时间仍然回答:)
答案 0 :(得分:0)
查看NSJSONSerialization
。这是安装xcode和SDK后免费获得的。实际上并没有那么糟糕。
这是Ray对Swifty Json的方法: http://www.raywenderlich.com/82706/working-with-json-in-swift-tutorial
这是您使用搜索时找到的内容。你必须"翻译"尽管如此。 How do I parse JSON with Objective-C?
您可能希望查看RestKit
以便更方便地处理JSON源。
试一试。当你遇到具体问题时,请回到SO。
答案 1 :(得分:-1)
a)如果您从API或任何在线网站获取JSON:
//Set url of the JSON
NString *urlReq = @"http://www.URLHERE.com/PATH/TO/THE/JSON"
//Get data from the JSON
NSData *jsonData = [NSData dataWithContentsOfURL:[NSURL URLWithString:urlReq]];
//Parse JSON
if(jsonData != nil){ //If the response is nil, the next line will crash
NSArray *resultArray = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:nil];
//Do stuff with the result...
}
b)如果您从核心数据中获取信息:
//Get context
NSManagedObjectContext *context = [self managedObjectContext];
//Preapre your fetch
NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Products" inManagedObjectContext:context];
NSFetchRequest *requestCoreData = [[NSFetchRequest alloc] init];
[requestCoreData setEntity:entityDescription];
//add predicates if needed
//Execute fetch
NSArray *resultArray = [context executeFetchRequest:requestCoreData error:nil];
//do stuff with the result....
a)如果您想要特定的索引:
NSString *description = resultArray[0][@"description"];
b)如果您不知道您想要的索引是什么(很可能是您的JSON中发生的事情):
BOOL found = NO;
int index = 0;
while(index < [resultArray count] && !found){
if([resultArray[index][@"description"] isEqualToString:@"Juice"])
found = YES;
else
++index;
}
if(found){
//'index' => index where the info you are searching can be found
}
else{
//The info couldn't be found in the array
}
答案 2 :(得分:-1)
试一试
var arrDicts: [Dictionary<String, AnyObject>] = []
arrDicts = try! NSJSONSerialization.JSONObjectWithData(dataFromService!, options: NSJSONReadingOptions.AllowFragments) as! [Dictionary<String, AnyObject>]
dataFromService是您从Web服务收到的数据。