2013-01-08 66 views
0

這裏是簡化的JSON文件,我需要從網絡服務下載它並在表中解析結果!用AFNetworking解析JSON給圓括號帶來的結果

編輯:我現在提供更精確的代碼,通過在線工具清理和格式化:

{ 
    "main": [ 
    { 
     "id": 0, <--- float value 
     "type": "type0", <--- STRING value 
     "valueA": { 
     "valueA1": 1, <--- float value 
     "valueA2": 2, <--- float value 
     "valueA3": 3 <--- float value 
     }, 
     "valueB": { 
     "valueB1": 1, <--- float value 
     "valueB2": 2 <--- float value 
     }, 
     "valueC": [ 
     { 
      "valueC1": "string0C1", <--- STRING value 
      "valueC2": 2, <--- float value 
      "valueC3": 3, <--- float value 
     } 
     ] 
    }, 

通過在線工具jsonviewer.stack.hu FORMATTED:

enter image description here

我需要用AFJSONRequestOperation解析它,然後我寫下這段代碼:

NSMutableArray *main = [JSON objectForKey:@"main"]; 
arrayID = [main valueForKey:@"id"]; 
arrayType = [main valueForKey:@"type"]; 

NSMutableArray *arrayValueC = [main valueForKey:@"valueC"]; 
NSMutableString *stringC1 = [arrayValueC valueForKey:@"valueC1"]; 

// I CANT USE objectForKey, XCode give an exception -[__NSArrayI objectForKey:]: unrecognized selector sent to instance 

NSLog(@"id: %@",arrayID); 
NSLog(@"type: %@",arrayType); 
NSLog(@"string: %@",stringC1); 

當我分析,我得到這個結果從NSLog的:

id: (
    0, 
    1, 
    2, 
    3, 
    4, 
    5, 
    6, 
    7, 
    8, 
    9 
) 

type: (
    type0, 
    type1, 
    type2, 
    type3, 
    type4, 
    type5, 
    type6, 
    type7, 
    type8, 
    type9 
) 

string: (
     (
     "string0C1" 
    ), 
     (
     "string2C1" 
    ), 
     (
     "string2C1" 
    ), 
     (
     "string3C1" 
    ), 
     (
     "string4C1" 
    ), 
     (
     "string5C1" 
    ), 
     (
     "string6C1" 
    ), 
     (
     "string7C1" 
    ), 
     (
     "string8C1" 
    ), 
     (
     "string9C1" 
    ) 
) 

就像你看到的一切完美,我可以推斷ID(浮動)和TYPE(串)的每一個值,但我討厭圓在valueC1字符串的每個對象中都有括號:我怎樣才能得到沒有括號和引號的乾淨的值C1?請如果你能提供一些代碼。謝謝!

回答

3

請勿使用valueForKey:。改爲使用objectForKey:。這可能是主要問題。當arrayValueA訪問

下面包含將顯現出來的問題在第一時間::但是,一旦你使用它,你可能會遇到新的問題

NSMutableArray *arrayValueA = [arrayMain objectForKey:@"valueA"]; 

儲存在valueA元素是一個對象,即一個字典而不是一個數組。

最後,您的簡化了無論如何JSON無效。幾個值缺失雙引號,例如:

"id": id0 

應該是:

"id": "id0" 

您更好地展示真實的JSON數據和真正的代碼。

更新:

你應該可以用下面的代碼來訪問JSON數據:

NSArray *main = [JSON objectForKey:@"main"]; 
NSDictionary* main0 = [main objectAtIndex:0]; 
arrayID = [main0 objectForKey:@"id"]; 
arrayType = [main0 objectForKey:@"type"]; 

NSArray *arrayValueC = [main objectForKey:@"valueC"]; 
NSDictionary *elem0 = [arrayValueC objectAtIndex:0]; 
NSString *stringC1 = [arrayValueC objectForKey:@"valueC1"]; 

NSLog(@"id: %@",arrayID); 
NSLog(@"type: %@",arrayType); 
NSLog(@"string: %@",stringC1); 
+0

感謝科多,但它不是我的JSON,我需要從網上下載它,並解析;我用在線工具格式化了這些結果。我現在編輯我的問題,以提供更精確和更清晰的代碼:objectForKey給我一個例外。請你能幫助我嗎? – Huxley

+0

@Huxley:感謝你的例外。他們告訴你你在哪裏鑄造了一個錯誤類型的對象。目前,實際上對象是* NSDictionary *,* NSArray *和* NSString *實例時,您使用* NSMutableDictionary *,* NSMutableArray *和* NSMutableString *。 – Codo

+0

很抱歉,我很感激這個例外。但即使使用NSDictionary,NSArray和NSString在NSMutable的地方...我得到同樣的錯誤:無法識別的選擇器。而且,對於數組和字典的所有組合,對於循環和鍵值,我實際上看不到括號和引號從「valueC1」字符串中消失。也許我需要一些代碼來識別確切的問題。 – Huxley