Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在iOS应用程序中解析JSON对象_Ios_Objective C_Json - Fatal编程技术网

在iOS应用程序中解析JSON对象

在iOS应用程序中解析JSON对象,ios,objective-c,json,Ios,Objective C,Json,嗨,我是Ios的新手,在我的项目中,我正在集成web服务,好的,很好 在这里,当我向服务器发送正确的请求时,响应来自服务器,如下面的“我的第一个响应” 如果我们向服务器发送了错误的请求,则响应来自服务器,如下面的“我的第二个响应” 所以,我们不知道在发送请求后从服务器获得哪种类型的Json对象 这里我的主要要求是,若我们从服务器得到正确的响应(如下面的第一个响应),那个么我们就可以保存我们想要的所有元素 如果我们得到了错误的响应(如下面的第二个响应),那么我们如何找到和打印该消息,因为有时我们得

嗨,我是Ios的新手,在我的项目中,我正在集成web服务,好的,很好

在这里,当我向服务器发送正确的请求时,响应来自服务器,如下面的“我的第一个响应”

如果我们向服务器发送了错误的请求,则响应来自服务器,如下面的“我的第二个响应”

所以,我们不知道在发送请求后从服务器获得哪种类型的Json对象

这里我的主要要求是,若我们从服务器得到正确的响应(如下面的第一个响应),那个么我们就可以保存我们想要的所有元素

如果我们得到了错误的响应(如下面的第二个响应),那么我们如何找到和打印该消息,因为有时我们得到正确的响应,有时我们从服务器得到错误的响应,所以我们如何找到和保存该响应

请帮帮我

如果发送正确的请求,则响应:- 如果我们发送了错误的请求,则响应:- 我的代码:-
在您的情况下,您可以按如下方式使用:

NSDictionary *responseObject = [NSJSONSerialization JSONObjectWithData:data options:0 error:&parseError];

if([responseObject objectForKey:@"error"] == nil)
{
   //You are getting correct response
}
else{
   // You are getting response with error
}

您可以检查响应是否有错误的密钥。否则,您可以在服务器端为所有响应(如statusCode)使用新变量。因此,如果您得到错误或成功,您的服务器端可以将其设置为statusCode。这是一个非常明确的方法

您可以使用UIAlertView显示错误消息

if([responseObject objectForKey:@"error"] == nil)
{
   //You are getting correct response

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Alert" message:@"Your Message" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil];
   [alert show];
}
else
{
   // You are getting response with error
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Alert" message:@"Error Message" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil];
   [alert show];
}

我猜你还没有发布完整的responseObject(当发送正确的请求时)。假设您在响应正确时得到error=0键,则可以执行以下操作:

NSMutableDictionary *jsonDictionary= [NSMutableDictionary alloc]init]

jsonDictionary=responseObject;

if([jsonDictionary valueForKey:@"error"]==@"0"]
{
//do some stuff
}
else
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Invalid Request" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil];
[alert show];
}

您在日志中得到了正确的响应对象??在这两种情况下,您应该保持相同的响应结构。对于,右-错误代码=1,消息=成功,数据为,错误-错误代码=0,message=failure&data-NILyes我正在日志中,有时我们得到正确的响应,有时我们得到错误的响应,所以如果我从服务器得到错误的响应,我们如何找到错误消息您可以将解析的数据存储到NSDictionary而不是ID中,并且您可以检查此字典是否包含键“error”如果值为1,则可以确定响应不正确。是@D shah,但如果我得到正确的响应,我将从响应中打印“Name”对象如果我得到错误的响应,则显示异常,如键“Name”没有对象那么如何处理这种情况呢?Hi@Divyesh Savaliya JSONSerialization解析的东西并不意味着结果就是一个字典。它也可以是一个数组,对吗?您可以使用JSONSerialization作为字典。您不知道[NSJSONSerialization JSONObjectWithData:]返回什么类型的对象。因此,您必须检查类型并强制转换为已检查的类型
NSDictionary *responseObject = [NSJSONSerialization JSONObjectWithData:data options:0 error:&parseError];

if([responseObject objectForKey:@"error"] == nil)
{
   //You are getting correct response
}
else{
   // You are getting response with error
}
if([responseObject objectForKey:@"error"] == nil)
{
   //You are getting correct response

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Alert" message:@"Your Message" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil];
   [alert show];
}
else
{
   // You are getting response with error
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Alert" message:@"Error Message" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil];
   [alert show];
}
NSMutableDictionary *jsonDictionary= [NSMutableDictionary alloc]init]

jsonDictionary=responseObject;

if([jsonDictionary valueForKey:@"error"]==@"0"]
{
//do some stuff
}
else
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Invalid Request" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil];
[alert show];
}