JSON 解析错误获取 brautaset.JSON 错误

Posted

技术标签:

【中文标题】JSON 解析错误获取 brautaset.JSON 错误【英文标题】:JSON parsing Error getting brautaset.JSON error 【发布时间】:2011-12-20 21:01:14 【问题描述】:

我正在向服务器请求一些结果,这些结果应该以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]);
    

【问题讨论】:

如果可能,请告诉我们您的resultString;这将使提供分析更容易。从错误来看,您提交的空“地图”属性可能存在问题。 我使用 jsonlint 来验证 JSON,它给了我一个日期格式错误。以下是结果字符串: "taskDate": newDate("September 23, 2011 00:00:00"), "roleTypeId": "TECHNICIAN" 我收到关于 taskDate 值的错误 这看起来不像是表示日期的有效格式,至少就 SBJSON 而言。我希望将日期视为字符串文字,您可以使用NSDateNSDateFormatter 根据您的需要进行按摩,或者将日期视为time_t 整数。至少这些是我使用 Stig 的框架处理日期的方式。就你所拥有的而言,省略包含字符串文字的newDate(),你应该很高兴。 【参考方案1】:

不要使用 NSString 创建 JSON 请求正文。使用 [NSDictionary dictionaryWithObjects:objects forKeys:keys];然后就做 [dictionaryinput JSONRepresentation];它将为您创建 JSON 字符串。这是序列化和反序列化 JSON 对象的最佳方式,将省去很多麻烦。

【讨论】:

是的,我现在只是用它来测试。主要问题是我的响应值我有一个返回的键值对:“taskDate”:newDate(000000) JSON 解析器无法处理它。我该如何解决? 要求上游返回 JSON,而不是一些自定义的类似 JSON 的格式。【参考方案2】:

以这种格式创建日期。

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

【讨论】:

以上是关于JSON 解析错误获取 brautaset.JSON 错误的主要内容,如果未能解决你的问题,请参考以下文章

在 create-react-app 创建的环境中获取本地 JSON 文件时出现 JSON 解析错误

如何解决json解析错误?

在通过改造获取对象数组时,错误无法解析方法

IE7 不消化 JSON:“解析错误”

骨干.js JSON解析错误

无法在 asp mvc C# 中获取 Json 数据解析