0

这是简化的 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 格式化:

在此处输入图像描述

我需要用 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 字符串的每个对象中的圆括号:我怎样才能得到没有括号和引号的干净 valueC1 ? 请如果你能提供一些代码。谢谢!

4

1 回答 1

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);
于 2013-01-08T21:55:04.843 回答