iOS-如何在xcode中解析Json数组并保存结果是字符串
您好,我正在尝试将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
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(@“结果为%@”,结果);'如何获取“网站”词典中每个键的值?这有意义吗?