如何从iphone应用程序中的JSON数据中获取整数值

时间:2011-08-25 09:57:00

标签: iphone objective-c json

我使用以下JSON日期

的日期数据
[
 {
     "categoryId": 202,
     "name": "Sport"
 },
 {
     "categoryId": 320,
     "name": "Fritid"
 },
 {
     "categoryId": 350,
     "name": "Kultur"
 },
 {
     "categoryId": 4920,
     "name": "Diverse"
 },
 {
     "categoryId": 4774,
     "name": "Samfunn"
 } ]

使用Follwing代码

SBJsonParser *parser = [[SBJsonParser alloc] init];

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.krsconnect.no/community/api.html?method=categories&appid=620&mainonly=true"]];
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *json_string = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
NSDictionary *object = [parser objectWithString:json_string error:nil];
//appDelegate.books = [[NSMutableArray alloc] initWithCapacity:0];

appDelegate.books = [[NSMutableArray alloc] init];

NSArray *results = [parser objectWithString:json_string error:nil];
for (int i=0; i<[results count]; i++) {
    Book  *aBook = [[Book alloc] initWithDictionary:[results objectAtIndex:i]];
    [appDelegate.books addObject:aBook];


    [aBook release];

    }

书类

    @interface Book : NSObject {


NSString *catId;


NSString *name;

  }

     @property(nonatomic,retain)NSString*catId;

     @property(nonatomic,retain) NSString *name;

  @end


   #import "Book.h"


@implementation Book


@synthesize catId,name;

-(id)init{ 
    self=[super init];
}

- (id)initWithDictionary:(NSDictionary*) dict {
   self.catId = [dict valueForKey:@"categoryId"];   self.name = 
   [dict valueForKey:@"name"];
   return self;
}

3 个答案:

答案 0 :(得分:6)

这是因为CatId的类型为NSString

将其更改为NSNumber并尝试

希望这有帮助。

答案 1 :(得分:2)

在解析categoryId的响应时,您似乎正在获取NSNumber。所以尝试将NSNumber对象替换为NSString。

答案 2 :(得分:0)

您获取的词典可能会将数值存储为NSNumber个对象。因此,您的catId也应该是NSNumber,或者-initWithDictionary:应该使用例如{1}}将类别ID提取为基本类型。然后应将-intValue和catId声明为int

顺便说一下,您应该使用-objectForKey:NSDictionary获取对象。由于-valueForKey:进行了一些额外处理,然后调用-objectForKey:,因此性能稍微提高一些。

同样json_string泄漏,因此appDelegate.books可能会发生泄漏。