当我尝试解析JSON响应时,我得到一个空响应并且出现此错误:
JSONValue failed. Error trace is: (
"Error Domain=org.brautaset.JSON.ErrorDomain Code=11 \"Unexpected end of string\" UserInfo=0x797c420 {NSLocalizedDescription=Unexpected end of string}"
)
这是我尝试发送JSON请求以及我如何尝试解析其响应的方式:
发送JSON请求:
- (void)viewWillAppear:(BOOL)animated{
//Specify the adress of the webservice (url)
NSURL *url = [NSURL URLWithString:@"http://xxxxxxxxxxx.com/webservices/"];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
NSString *jsonStringArray=[aMutableArray JSONRepresentation];
NSLog(@"-------------");
NSLog(@"%@",jsonStringArray);
NSLog(@"-------------");
[request setPostValue:jsonStringArray forKey:@"liste_des_themes"];
NSLog(@"The response string is: %@",request.responseString);
[request setDelegate:self];
[request startAsynchronous];
}
对于NSLog
,我试图在发送之前显示json字符串,我得到了正确的JSON格式:
NSLog(@"%@",jsonStringArray);//["Mairie","Préfectures et sous-préfectures"]
现在第二个NSLog
,我得到了null:
NSLog(@"The response string is: %@",request.responseString);//The response string is: (null)
解析响应时:
-(void)requestFinished:(ASIHTTPRequest *)request
{
if(request.responseStatusCode==200)
{
NSLog(@"This block gets called, response code is 200");//This block gets called, response code is 200
//parse the response
NSLog(@"The response string is: %@",request.responseString);
NSString *responseString=[request responseString];
NSDictionary *responseDict=[responseString JSONValue];
}
}
对于试图显示响应字符串的NSLog
,我什么都没有,既没有空,也没有正确的值:
NSLog(@"The response string is: %@",request.responseString);
//The response string is:
之后,我得到了这个跟踪错误:
JSONValue failed. Error trace is: (
"Error Domain=org.brautaset.JSON.ErrorDomain Code=11 \"Unexpected end of string\" UserInfo=0x797c420 {NSLocalizedDescription=Unexpected end of string}"
)
你能帮助我吗?提前完成。
答案 0 :(得分:2)
我认为你无法控制网络服务,因此告诉你对此做些什么通常是不可取的。
1)首先,确保JSON响应看起来正确。你能把它下载到浏览器中看看它看起来没问题吗?
2)如果看起来没问题,可以通过JSON lint测试吗? (试试jsonlint.com,并将其插入其中。)
3)如果它通过(1)和(2),则查看它是否在返回的数据响应中有任何前导空值。我在自己的代码中发现了这种情况。如果不先删除前导空值,我无法直接使用它。
不幸的是,我不是在我的Mac上复制我用来解决这个问题的代码。但这是一个真正的问题,解决方案是删除空值(在我的情况下有数千个。)在sting中看起来像字符串终止符,因此前导空值隐藏真实内容。
答案 1 :(得分:1)
您在提供JSON的Web服务上遇到问题。调试,你会发现问题。