当第二次调用时,iOS JSON解析返回null

时间:2013-05-15 15:43:44

标签: iphone ios json

嗨,我是obj-c的新手。

我在json上得到了一些奇怪的结果。 我有一个由NSThread调用的json函数, 当我第一次运行我的json函数时,它显示了一个结果,但是当函数第二次调用时,它返回null。

这是我的json函数:

- (void) updatePaxWithBook:(Book*)_book{

NSString* bookCode = _book.bookCode;

NSString* url = [NSString stringWithFormat:@"%@/?book_code=%@", URL_UPDATE_PAX,bookCode];
url = [url stringByReplacingOccurrencesOfString:@" " withString:@"%20"];

JSONDecoder* jDecoder = [[JSONDecoder alloc] init];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
jObject = [jDecoder objectWithData:response];

NSString* errCode =@"";
if ([[jObject objectForKey:@"err_code"] isKindOfClass:[NSNumber class]]) {
    errCode = [[jObject objectForKey:@"err_code"] stringValue];
} else {
    errCode = [jObject objectForKey:@"err_code"];
}

NSLog(@"OUT >> %@",jObject);
NSLog(@"OUT >> %@",errCode);
}

所以当我运行我的第一个json时,这就是响应:

{ "err_code": 0, "book_code": "1XX1AS", "pax_num": [1,0,0], "pax_name": ["USER NAME"] }

NSLog显示一些结果:

OUT >> {
"book_code" = 1XX1AS;
"err_code" = 0;
"pax_name" =     (
    USER NAME
);
"pax_num" =     (
    1,
    0,
    0
);}
OUT >> 0

但是当函数第二次调用时,这里是响应:

{ "err_code": 001002, "err_msg": "Validation error: there are no changes on original data." }

和NSLog显示一些空

OUT >> (null)
OUT >> (null)

我的代码有什么问题,我该怎么办?

1 个答案:

答案 0 :(得分:2)

通过http://jsonlint.com运行你的第二个JSON,你会发现它不喜欢第二个例子中数字的前导零。

我通过NSJSONSerialization运行你的第二个例子(它给了我一个NSError对象)来证实这一点:

NSError *error = nil;
jObject = [NSJSONSerialization JSONObjectWithData:response options:0 error:&error];

if (error)
    NSLog(@"JSON error: %@", error);
else
    NSLog(@"JSON result: %@", jObject);

生成的NSError对象包含以下错误消息:

  

在字符15周围带前导零的数字。

你是如何生成那个JSON的?您是编写自己的JSON字符串,还是使用标准的JSON函数调用?

该数字错误代码应该没有前导零或者应该用引号括起来。无论生成JSON错误响应是什么,都不能正确编码JSON。