Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS-如何在xcode中解析Json数组并保存结果是字符串_Ios_Iphone_Objective C_Json - Fatal编程技术网

iOS-如何在xcode中解析Json数组并保存结果是字符串

iOS-如何在xcode中解析Json数组并保存结果是字符串,ios,iphone,objective-c,json,Ios,Iphone,Objective C,Json,您好,我正在尝试将Json字符串解析为NSArray,并将某些结果保存为字符串,以便为我的应用程序中的不同用户设置权限。我目前的代码是: NSError *jsonParsingError1 = nil; accountData = [NSJSONSerialization JSONObjectWithData:jsonAccount options:NSJSONReadingM

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

NSError *jsonParsingError1 = nil;
        accountData = [NSJSONSerialization JSONObjectWithData:jsonAccount
                                                   options:NSJSONReadingMutableContainers error:&jsonParsingError1];
accountData
是在.h文件中创建的NSMutableArray。
jsonAccount
是由转换后的NSString创建的NSData

阵列的NSLog out为

  {
    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;
        }
    );
},       
当我尝试从其中一个结果创建sting并将其显示在日志中时,我收到以下错误:

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

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

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

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

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

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

JSON是一个包含四个键的字典:account、companyName、id和websites

关键的“网站”将为您提供一个数组

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

“网站”数组中的每个字典都有很多键,如account、accountId、anonymiseIP等等。其中一些键的值是字典或数组


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

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

为下面的内容编写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];

太棒了,非常感谢你!我能够获得account、companyName、id和websites字段的所有值。使用此代码“NSString*结果=[[accountData valueForKey:@“companyName”]组件通过字符串连接:@”“];NSLog(@“结果为%@”,结果);'如何获取“网站”词典中每个键的值?这有意义吗?