如何从字符串而不是URL解析json数据

时间:2012-04-04 05:18:35

标签: iphone objective-c

我想解析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;

       }

DataController类

@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

2 个答案:

答案 0 :(得分:1)

This Post包含解析JSON,XML等的类。我一直在使用它们。

答案 1 :(得分:1)

在新的sdk中,您不必使用外部类来解析您的JSon,您可以使用NSJSONSerialization在iOS 5.0及更高版本中可用。

要使用此类解析json String,您需要将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或   无穷大。

希望对你有所帮助。