2017-02-28 41 views
0

我試圖解析www.fixer.io JSON以獲取貨幣數據。我一直在解析JSON時遇到問題,並試圖從「rates」字典中分離出鍵和值。我需要將它們分開,以便我可以將它們放入數組中以顯示貨幣名稱(例如:USD,EUR,JPN)及其各自的匯率。如何解析JSON字典並將鍵和值放入單獨的數組中 - Objective C

我讀過,我必須使用「allKeys」和「allValues」來做到這一點,但到目前爲止我沒有運氣。有任何想法嗎?

NSURL *fixerURL = [NSURL URLWithString:@"http://api.fixer.io/latest?base=USD"]; 
NSData *data = [NSData dataWithContentsOfURL:fixerURL]; 
NSError *error; 

    NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error]; 

    NSMutableArray *arr = [[NSMutableArray alloc]init]; 
    NSMutableArray *arr2 = [[NSMutableArray alloc]init]; 
    NSArray *names; 
    NSArray *rates; 


    for (names in json) { 
     names = [json allKeys]; 
     for (rates in json) { 
      rates = [json allValues]; 
     } 
     [arr addObject:names]; 
     [arr2 addObject:rates]; 
    } 
    self.currencyList = arr; 
    self.currencyRates = arr2; 
    [self updateTableView]; 

這裏--->基於http://api.fixer.io/latest?base=USD

+0

我得到的errr'「NSInvalidArgumentException」的 ,原因是:「數據參數是n'' –

+0

你可以附加你的項目 –

+0

當然,雖然我沒有看到一個按鈕來附加我的項目。我會怎麼做? – Jumpman987

回答

2

希望這會幫助你,

NSURL *fixerURL = [NSURL URLWithString:@"http://api.fixer.io/latest?base=USD"]; 
    NSData *data1 = [NSData dataWithContentsOfURL:fixerURL]; 
    NSError *error; 

    NSDictionary *json1 = [NSJSONSerialization JSONObjectWithData:data1 options:kNilOptions error:&error]; 
    NSLog(@"%@",json1); 
    NSDictionary *json = [[NSDictionary alloc]initWithDictionary:[json1 objectForKey:@"rates"]]; 
    NSMutableArray *arr = [[NSMutableArray alloc] initWithArray:[json allKeys]]; 
    NSMutableArray *arr2 = [[NSMutableArray alloc]initWithArray:[json allValues]]; 
    NSLog(@"%@",arr); 
    NSLog(@"%@",arr2); 
0

JSON迴應你必須得到所有yoiur貨幣匯率如下

NSMutableArray *allCurrencyKey = [[json valuesForKey:@"rates"] allKeys]; 

NSMutableArray *allRates = [json valueForKey:@"rates"]; 

for(NSString *strCurKey in allCurrencyKey) 
{ 
    NSLog (@" %@ rate is %@ ", strCurKey, [allRates valueForKey :strCurKey ]); 
} 

希望這將有助於你的JSON。

0

我不確定你得到了什麼錯誤,但是當我嘗試運行這段代碼時,我得到的數據回來爲零。當然,這會崩潰應用程序。

它可能與您用來獲取JSON的方法有關。 dataWithContentsOfURL:不應用於基於網絡的URL。 dataWithContentsOfURL:

要通過網絡獲取數據,請查看NSURLSession

0

使用下面的代碼來獲得價格河畔人名幣

NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error]; 

通過這種反應你可以得到所有率:

NSMutableDictionary *rates = [json objectForKey:@"rates"]; 

//Get All Currency Names by `allKeys`. 
NSArray *currencyTitles = [rates allKeys]; 

for(NSString *currencyName in currencyTitles){ 

    //Get Value. 
    NSString *aStrCurValue = [rates objectForKey:currencyName]; 
} 
+0

我得到一個關鍵的allKeys和對象的錯誤。它說沒有可見的@interface NSMutableArray聲明選擇器'objectForKey'/'allKeys'。任何想法爲什麼? – Jumpman987

+0

請檢查我的更新答案作爲您的費率JSON是一種字典。 – CodeChanger

1

鍵包含一個字典不是數組,所以我們不能ge牛逼國名和貨幣作爲字典格式,如果你想不同的陣列中,以獲得國家名稱和貨幣,所以你需要單獨讓他們像波紋管

NSArray *arrKeys = [[json valueForKey:@"rates"] allKeys]; 
NSArray *arrValues = [[json valueForKey:@"rates"] allValues]; 
相關問題