将JSON解析为可用的词典

时间:2015-12-17 14:13:02

标签: ios arrays json swift

我目前正在构建一个食物跟踪器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上研究它,但我还没有找到一些东西这适用于我的情况。再次抱歉,非常感谢您抽出时间仍然回答:)

3 个答案:

答案 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)

回答参考资料。如何在Objective-C

中执行此操作

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....

2-然后解析检索到的信息

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服务收到的数据。