2015-12-17 95 views
-5

我目前正在建立一個食品追蹤iOS應用程序(使用SWIFT 2),我想有一個數據庫存儲在應用程序和訪問的所有食物(和它們的信息)。JSON解析成可用字典

的想法是,當一些添加「冰淇淋」他們吃飯,他的卡路里/糖/脂肪「計數器」增長冰淇淋各自的營養價值。 (所以,這個數據可以在以後進行處理)

我發現食物在什麼似乎像JSON格式的數據庫(參見下文),但我不知道如何與迅速處理所有這些數據,這樣我可以訪問例如,特定成分中的卡路里數量。

到目前爲止,我嘗試這樣做:

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, 
     } 
     ... 
    ] 

我承認我的問題是不是第一次很清楚(我真的很新的這個我道歉),但我真的試圖在發佈前先研究它#2,但我還沒有找到的東西,作品爲我的情況。一次抱歉,許多感謝您抽出時間來回答仍是:)

+1

使用Alamofire + SwiftyJson。只是一個簡單的建議 - 下一次做一些研究。已經有很多討論如何做到這一點。 – gasho

+1

請查看堆棧溢出[問] –

回答

0

看一看到NSJSONSerialization。這是您安裝xcode和SDK後免費獲得的內容。實際上並不是那麼糟糕。

這是雷人的方式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

答案以供參考pruposes。如何在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 
} 
-1

只要給它一個嘗試

var arrDicts: [Dictionary<String, AnyObject>] = [] 
arrDicts = try! NSJSONSerialization.JSONObjectWithData(dataFromService!, options: NSJSONReadingOptions.AllowFragments) as! [Dictionary<String, AnyObject>] 

dataFromService是您從Web服務收到的數據。

+0

我得到'無法將'__NSCFDictionary'(0x4f045c)類型的值轉換爲'NSArray'(0x4f018c)。 – user1818534

+0

嘗試用「MutableContainers」代替「AllowFragments」 – channi

+0

仍然是相同的錯誤:( – user1818534