【问题标题】:iOS - How to parse Json array in xcode and save results are stringsiOS - 如何在 xcode 中解析 Json 数组并将结果保存为字符串
【发布时间】:2014-03-13 10:56:12
【问题描述】:

您好,我正在尝试将 Json 字符串解析为 NSArray,并将某些结果保存为字符串,以便为我的应用中的不同用户设置权限。我当前的代码是:

NSError *jsonParsingError1 = nil;
        accountData = [NSJSONSerialization JSONObjectWithData:jsonAccount
                                                   options:NSJSONReadingMutableContainers error:&jsonParsingError1];

accountData 是在 .h 文件中创建的 NSMutableArray。 jsonAccount 是通过转换一个 NSString 创建的 NSData

数组的 NSLog 输出是;

  {
    account = "XXXX";
    companyName = XXXXX;
    id = XXXXX;
    websites =         (
                    {
            account = "XXXXX";
            accountId = XXXXX;
            anonymiseIP = 0;
            companyName = XXXXX;
            XXXX = 0;
            domains =                 (
                "XXXXX"
            );
            features =                 {
                advancedSegmentation = 1;
                attentionHeatmaps = 1;
                domains = 0;
                dotHeatmaps = 1;
                goalConversionTracking = 1;
                interactionHeatmaps = 1;
                leadInfo = 0;
                scrollHeatmaps = 1;
                timeHeatmaps = 1;
                users = 0;
                valueHeatmaps = 1;
                visitorPlayback = 1;
                visitorScoring = 1;
                visitors = 1;
            };
            fixedElementSelector = "";
            flagClicksReceived = 0;
            flagDataReceived = 0;
            flagGoalsReceived = 0;
            flagInteractionsReceived = 0;
            flagScrollsReceived = 0;
            id = XXXXX;
            interactionSelector = "";
            name = "XXXX";
            permissions =                 (
                segments,
                heatmaps,
                visitors,
                campaigns,
                support,
                globalSettings,
                websiteSettings
            );
            setCookies = 1;
            status = 1;
            statusMessage = "";
            statusString = OK;
            trialling = 1;
        }
    );
},       

当我尝试从其中一个结果中创建一个刺痛并将其显示在日志中时,我收到此错误:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFArray:]: unrecognized selector sent to instance 0x6a950f0'

如何将不同的键保存为字符串?

【问题讨论】:

    标签: ios iphone objective-c json


    【解决方案1】:

    看起来您的 JSON 是字典,而不是数组。

    【讨论】:

      【解决方案2】:

      你的 JSON 不是数组,你应该像 NSDictionary 一样解析它

      【讨论】:

        【解决方案3】:

        解析 JSON 后,您应该测试它返回的对象类型。例如:

        if ([accountData isKindOfClass:[NSArray class]]) {
           // handle like an array
        } else if ([accountData isKindOfClass:[NSDictionary class]]) {
           // handle like a dictionary
        }
        

        【讨论】:

          【解决方案4】:

          您的 JSON 是一个包含四个键的字典:帐户、公司名称、ID 和网站。

          关键的“网站”会给你一个数组。

          您可以遍历“网站”数组,每个元素都是一个字典。

          “网站”数组中的每个字典都有很多键,例如帐户、帐户 ID、匿名 IP 等。其中一些键的值是字典或数组。

          在 NSLog 语句中,(a, b, c) 将是一个数组,而 { a = x; b = y; c = z; } 将是一本字典。

          【讨论】:

          • 非常感谢您!我能够获取帐户、公司名称、ID 和网站字段的所有值。使用此代码 'NSString * 结果 = [[accountData valueForKey:@"companyName"] componentsJoinedByString:@""]; NSLog(@"结果是 %@", 结果);'如何获取“网站”字典中每个键的值?这有意义吗?
          【解决方案5】:

          您的服务器响应是字典,因此请将 accountData 更改为字典

          在下面写NSLog,你会在里面得到信息

          [accountData objectForKey:@"account"];
          [accountData objectForKey:@"companyName"];
          [accountData objectForKey:@"id"];
          [[accountData objectForKey:@"websites"] count];//array
          [[[accountData objectForKey:@"websites"] objectAtIndex:0]objectForKey:@"account"];
          [[[accountData objectForKey:@"websites"] objectAtIndex:0]objectForKey:@"domains"];
          [[[[accountData objectForKey:@"websites"] objectAtIndex:0]objectForKey:@"domains"]count]; //array
          [[[[accountData objectForKey:@"websites"] objectAtIndex:0]objectForKey:@"domains"]objectAtIndex:0];
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-05-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多