我的应用程序没有解析JSON响应

时间:2012-01-26 15:47:01

标签: objective-c ios json

当我尝试解析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}"
    )
你能帮助我吗?提前完成。

2 个答案:

答案 0 :(得分:2)

我认为你无法控制网络服务,因此告诉你对此做些什么通常是不可取的。

1)首先,确保JSON响应看起来正确。你能把它下载到浏览器中看看它看起来没问题吗?

2)如果看起来没问题,可以通过JSON lint测试吗? (试试jsonlint.com,并将其插入其中。)

3)如果它通过(1)和(2),则查看它是否在返回的数据响应中有任何前导空值。我在自己的代码中发现了这种情况。如果不先删除前导空值,我无法直接使用它。

不幸的是,我不是在我的Mac上复制我用来解决这个问题的代码。但这是一个真正的问题,解决方案是删除空值(在我的情况下有数千个。)在sting中看起来像字符串终止符,因此前导空值隐藏真实内容。

答案 1 :(得分:1)

您在提供JSON的Web服务上遇到问题。调试,你会发现问题。