使用AFNetworking解析JSON会给出圆括号的结果

时间:2013-01-08 10:59:31

标签: xcode json parsing 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格式化:

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(float)和TYPE(string)的每个值,但我讨厌valueC1字符串的每个对象中的圆括号:如何在没有括号的情况下得到干净的valueC1和引号?如果你能提供一些代码请。谢谢!

1 个答案:

答案 0 :(得分: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);