用AFNetworking解析JSON给圆括号带来的结果

问题描述:

这里是简化的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?请如果你能提供一些代码。谢谢!

请勿使用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