2016-02-12 84 views
0

在我的JSON響應中,我收到一個字典,其中有一個數組,該數組是一個包含幾個鍵值的字典,爲了使它在這裏變得簡單易懂是JSON響應:如何解析數組中的字典,該字典位於字典中

{ 
    weather = (
      { 
     description = haze; 
     icon = 50n; 
     id = 721; 
     main = Haze; 
     } 
    ); 
    } 

我想知道我怎麼可以檢索的要素的說明,圖標,標識和主。假設我有一個名爲str的NSString,我如何將描述的值添加到這個字符串中。我嘗試了很多不同的東西,但都沒有效果。一個我認爲應該工作,但並沒有爲:

str = [[[dir valueForKey:@"weather"] objectAtIndex:0] valueForKey:@"description"]; 

有人可以讓我知道如何訪問這些4個值。我不想創建這些值的新數組,然後檢索它們。問候。

+0

print str&show result。 –

+0

您是否嘗試過爲了「調試」目的而實際上在單獨一行中執行每個調用,即獲取字典,然後獲取第一個對象,然後獲取描述。我假設其中的一個是'無',它可以幫助你找出問題所在。通過一切手段,然後將它合併回一行,一旦你找到了問題。但是你並不是真的在創建一個數組,你只是引用了一個現有的數組。 – Flexicoder

+2

似乎你正在做正確的事情。但你仍然嘗試過嗎? [[[dir objectForKey:@「weather」] objectAtIndex:0] valueForKey:@「description」]; – iOSEnthusiatic

回答

1

使用NSJSONSerialization將您的JSON數據轉換爲NSObjects。

然後你需要基於它們的結構索引你的對象。

如果結構是固定的,並且保證,您可以用固定的索引/鍵做到這一點:

//data in theJSONDict. 

NSArray *outerArray = theJSONDict[@"weather"]; 
NSDictionary *firstWeatherItem = outerArray[0]; 
NSString *firstItemDesc = firstWeatherItem[@"description"]; 

你也可以做這一切在1號線:

firstItemDesc = theJSONDict[@"weather"][0][@"description"]; 

但是,這是更難以調試。

如果這是JSON數據從需要比上述防守代碼更,並寫試圖抓取從字典鍵,測試爲無代碼的服務器來了,或者使用的計數通過陣列(多個)循環對象,或在盲目索引它之前測試數組的長度。否則,如果輸入數據的格式與您的假設不符,那麼您可能會崩潰。

(順便說一句,不要使用valueForKey這一點。這是KVO代碼,而它通常的作品,它是不一樣的使用的NSArray和NSDictionary的方法獲取數據,有時無法正常工作。 )

+0

我的導師確實指出了同樣的事情,如果我嘗試設置一個值,但它不包含在服務器的響應中,我試過並且它被設置爲空,所以我仍然需要檢查一個值由服務器發送還是不發送? –

+0

您問「我是否還需要檢查服務器是否發送了一個值?」。良好的編程習慣是驗證從外部源發送給您的任何數據。所以是的。 –