2011-12-20 79 views
0

我正在向服务器发出一个请求,要求以JSON的格式返回一些结果。JSON解析错误获取brautaset.JSON错误

当我打印出请求的字符串时,它显示正确的输出。然而,当我尝试分析结果字符串我得到的错误:

Error Domain=org.brautaset.JSON.ErrorDomain Code=3 "Object value expected for key: result" UserInfo=0x6c4cbe0 {NSUnderlyingError=0x6c4caf0 "Object value expected for key: map", NSLocalizedDescription=Object value expected for key: result} 

这是我的JSON的代码:

SBJSON *jsonParser = [[SBJSON alloc] init]; 

[jsonParser setHumanReadable:YES]; 
NSError *theError; 

NSString *loginPayload = @"{\"service\": \"getMyJobs\", \"params\": {\"map\": {\"day\": {\"javaClass\": \"java.sql.Timestamp\", \"time\": 1316757600000}}}, \"security\": {\"map\": {}}, \"userInfo\": false}"; 

NSURL * url = [NSURL URLWithString:kURLForAPI]; 

NSMutableURLRequest * req = [NSMutableURLRequest requestWithURL:url]; 
[req setHTTPMethod:@"POST"]; 
[req setHTTPBody:[loginPayload dataUsingEncoding:NSUTF8StringEncoding]]; 
[req setHTTPShouldHandleCookies:YES]; 
[req setValue:@"text/xml charset=UTF-8" forHTTPHeaderField:@"Content-Type"]; 
[req setValue:cookie forHTTPHeaderField:@"Cookie"]; 

NSHTTPURLResponse * response = nil; 
NSData * dataResult = [NSURLConnection sendSynchronousRequest:req returningResponse:&response error:&theError]; 
NSMutableDictionary *dicts; 

if (dataResult) { 
    NSString *resultString = [[NSString alloc] initWithData:dataResult encoding:NSUTF8StringEncoding]; 
    //NSLog(@"login response: %@",resultString); 
    //NSLog(@"response %@", [response allHeaderFields]); 

    dicts = [jsonParser objectWithString:resultString error:&theError]; 
    //dicts = [resultString JSONValue]; 
    if(theError) 
    { 
     NSLog(@"Result %@",[theError description]); 
    } 
+0

如果可能,向我们展示您的'resultString';这将使分析更容易。从错误中看来,您可能在提交的空白“地图”属性中遇到问题。 – jstevenco 2011-12-20 21:08:55

+0

我用jsonlint来验证JSON,它给了我一个日期格式的错误。下面是结果字符串: { “taskDate”:newDate( “2011年9月23日00:00:00”), “roleTypeId”: “技术人员”} 我在taskDate价值 – bakwarte 2011-12-21 00:37:43

+0

得到一个错误看起来不像一个有效的表示日期的格式,至少就SBJSON而言。我期望看到日期为字符串文字,您可以使用'NSDate'和'NSDateFormatter'按照您的需要进行按摩,或者作为'time_t'整数。至少这些是我用Stig框架处理日期的方法。所以就你所拥有的而言,省略了包含字符串文字的'newDate()',你应该很好。 – jstevenco 2011-12-21 01:51:00

回答

0

不要使用NSString创建JSON请求主体。使用[NSDictionary dictionaryWithObjects:objects forKeys:keys];然后执行[dictionaryinput JSONRepresentation];它会为你创建JSON字符串。这是序列化和反序列化JSON对象的最佳方式,并且会节省很多麻烦。

+0

是的,我现在只用它来测试。主要问题是与我的回应值 我有一个返回的键值对: “taskDate”:newDate(000000) JSON解析器无法处理它。我如何解决这个问题? – bakwarte 2011-12-21 01:22:45

+0

请求上游返回JSON,而不是一些自定义类JSON格式。 – 2012-09-03 16:38:12

0

以此格式创建日期。

NSStime *time = [NSString stringWithFormat:@"/Date(%@)/", [NSNumber numberWithLongLong:[[NSDate date] timeIntervalSince1970] * 1000]];