如何从字符串而不是 URL 解析 json 数据
Posted
技术标签:
【中文标题】如何从字符串而不是 URL 解析 json 数据【英文标题】:how to parse json data from a string instead of a URL 【发布时间】:2012-04-04 05:18:34 【问题描述】:我想解析一个 NSString 中的 json 数据,我该怎么做呢
NSString *data=[[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding];
NSLog(@"%@",data);
NSArray *tempArray =[[DataController staticVersion] startParsing:data];
for (int i = 0; i<[tempArray count]; i++)
id *item = [tempArray objectAtIndex:i];
NSDictionary *dict = (NSDictionary *) item;
SearchCode *theObject =[[SearchCode alloc] init];
[theObject setCodeValue:[dict objectForKey:@"CodeValue"]];
[theObject setCodeDescription:[dict objectForKey:@"CodeAddedDate"]];
[theObject setCodeAddedDate:[dict objectForKey:@"CodeAddedDate"]];
[theObject setCodeID:[dict objectForKey:@"CodeID"]];
[theObject setUpdateDateTime:[dict objectForKey:@"UpdateDateTime"]];
[cptArray addObject:theObject];
[theObject release];
theObject=nil;
数据控制器类
@interface DataController : NSObject
+ (id)staticVersion;
- (NSMutableArray *) startParsing:(NSString *)theURLString;
@end
#import "DataController.h"
#import "JSON.h"
@implementation DataController
DataController *theInstance;
+(id)staticVersion
if(!theInstance)
theInstance = [[DataController alloc] init];
return theInstance;
- (NSMutableArray *) startParsing:(NSString *)theURLString
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@",theURLString]];
NSString *fileContent= [NSString stringWithContentsOfURL:url];
SBJSON *parser = [[SBJSON alloc] init];
NSDictionary *data = (NSDictionary *) [parser objectWithString:fileContent error:nil];
NSArray *items = (NSArray *) data ;
return items;
@end
【问题讨论】:
xprogress.com/… iphonedevelopertips.com/cocoa/… @Anand 我也遵循了这些方法,你可以看到我想要的代码而不是 url,数据应该从给定的字符串 var 解析 看看这个--------***.com/questions/7077007/… 我已经看到他们也提供了相同的 url 链接来获取数据并像我一样解析它 【参考方案1】:This Post 包含解析 JSON、XML 等的类。我一直在使用这些。
【讨论】:
【参考方案2】:在新的 sdk 中,您不必使用外部类来解析您的 JSon,您可以使用 NSJSONSerializationwitch 在 ios 5.0 及更高版本中可用。
要使用此类解析 json 字符串,您需要将 NSString 转换为 NSData,您可以这样做:
NSData *data = [stringData dataUsingEncoding:NSUTF8StringEncoding];
之后就可以使用方法将数据转成json了:
id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
你返回的类型将取决于,因为它就像你的 json,如果你的 json 是一个数组,它将是一个数组,如果是一个字典,它将是一个字典,等等。 来自苹果文档:
可以转换为 JSON 的对象必须具有以下内容 属性:
***对象是 NSArray 或 NSDictionary。所有对象都是 NSString、NSNumber、NSArray、NSDictionary 或 NSNull 的实例。全部 字典键是 NSString 的实例。数字不是 NaN 或 无穷大。
希望对你有帮助。
【讨论】:
是的,我明白了,您需要将其转换为 NSData,就像我在第一行代码中放置的那样,然后,您将这些数据转换为 NSArray 或 NSDictionary,就像我放置的那样在第二行代码中。 谢谢它给了我很大的帮助,我来自服务器的数据是字符串而不是字典或数组,所以很难访问键值,但是使用这段代码我将字符串转换为数据json 然后是字典等等。以上是关于如何从字符串而不是 URL 解析 json 数据的主要内容,如果未能解决你的问题,请参考以下文章
当 Json root 不是数组而是对象时如何解析 JSON 数据,反之亦然,基于不同的 url?
objective-c json 解析器:如何解析以字符串而不是括号开头的 json 文件?
如何从android中的URL获取json数组而不是html