Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.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 使用NSJSONSerialization将NSString转换为JSON不起作用_Ios_Objective C_Json_Nsjsonserialization - Fatal编程技术网

Ios 使用NSJSONSerialization将NSString转换为JSON不起作用

Ios 使用NSJSONSerialization将NSString转换为JSON不起作用,ios,objective-c,json,nsjsonserialization,Ios,Objective C,Json,Nsjsonserialization,我有这个功能: - (void)checkLogin:(NSString *)pLogin andPassword:(NSString*) pPassword { //Create the data object. NSMutableDictionary *tLoginAndPasword = [NSMutableDictionary dictionaryWithObjectsAndKeys:pLogin,@"Login",pPassword,@"Password", nil];

我有这个功能:

- (void)checkLogin:(NSString *)pLogin andPassword:(NSString*) pPassword {
    //Create the data object.
    NSMutableDictionary *tLoginAndPasword = [NSMutableDictionary dictionaryWithObjectsAndKeys:pLogin,@"Login",pPassword,@"Password", nil];
    NSMutableDictionary *tData = [NSMutableDictionary dictionaryWithObjectsAndKeys:[_Util serializeDictionary:tLoginAndPasword],@"Data", nil];
    //Call the login method.
    NSData *tResponse = [_Util getLogin:tData];
    if (tResponse != Nil) {
        _oLabelErrorLogin.hidden = YES;
        [_Util setUser:pLogin andPassword:pPassword];
        NSMutableDictionary *tJSONResponse =[NSJSONSerialization JSONObjectWithData:tResponse options:kNilOptions error:nil];
        NSString *tPayload = [tJSONResponse objectForKey:@"Payload"];
        if([[tJSONResponse objectForKey:@"StatusCode"]  isEqual: @"424"]) {
            //Set global values.
            NSData *tPayloadData = [tPayload dataUsingEncoding:NSUTF8StringEncoding];
            if ([NSJSONSerialization isValidJSONObject:tPayloadData]) {
                _Payload = [NSJSONSerialization JSONObjectWithData:tPayloadData options:kNilOptions error:nil];
                _RowCount = _Payload.count;
            } else {
                NSLog(@"JSON Wrong String %@",tPayload);
            }
        } else if([[tJSONResponse objectForKey:@"StatusCode"]  isEqual: @"200"]){
            _Payload = Nil;
        }
    } else {
        //Set global values.
        _Payload = Nil;
        _oLabelErrorLogin.hidden = NO;
        //Clear login data.
        _oLogin.text = @"";
        _oPassword.text = @"";
        [_Util setUser:@"" andPassword:@""];
    }
}
JSON响应如下所示:

{
  "Payload": "{\"UserName\":\"Marco Uzcátegui\",\"Clients\":[{\"UserProfileId\":4,\"ProfileName\":\"Platform Administrator\",\"ClientName\":\"Smart Hotel Platform\",\"InSession\":true},{\"UserProfileId\":5,\"ProfileName\":\"Administrator\",\"ClientName\":\"La Moncloa de San Lázaro\",\"InSession\":false},{\"UserProfileId\":6,\"ProfileName\":\"Administrator\",\"ClientName\":\"Jardín Tecina\",\"InSession\":false}]}",
  "StatusCode": "424",
  "StatusDescription": null
}
如您所见,我在“Payload”中有一个转义字符串,它是一个正确的JSON,因此我想用该字符串生成另一个NSMutableDictionary,因此我正在执行以下操作:

NSData *tPayloadData = [tPayload dataUsingEncoding:NSUTF8StringEncoding];
if ([NSJSONSerialization isValidJSONObject:tPayloadData]) {
    _Payload = [NSJSONSerialization JSONObjectWithData:tPayloadData options:kNilOptions error:nil];
    _RowCount = _Payload.count;
} else {
    NSLog(@"JSON Wrong String %@",tPayload);
}
因此,我从NSString创建一个NSData,并询问它是否有效,它总是返回false

我试图替换字符串中的“\”但无效

[tPayload stringByReplacingOccurrencesOfString:@"\\\"" withString:@""]
我尝试用字符串创建NSMutableDictionary,但结果不是dictionary

NSMutableDictionary *tPayload = [tJSONResponse objectForKey:@"Payload"];
我有点迷路了

任何帮助都将不胜感激


关于。

方法
NSJSONSerialization.isValidJSONObject:
检查对象(例如
nsdictional
NSArray
实例)是否可以转换为JSON。它不会检查
NSData
实例是否可以从
JSON转换为。对于
NSData
,它将始终返回false


因此,只需调用
NSJSONSerialization.JSONObjectWithData:options:
并检查结果。

方法
NSJSONSerialization.isValidJSONObject:
检查对象(例如
nsdictional
NSArray
实例)是否可以转换为JSON。它不会检查
NSData
实例是否可以从
JSON转换为。对于
NSData
,它将始终返回false

因此,只需调用
NSJSONSerialization.JSONObjectWithData:options:
,然后检查结果。

问题是这一行

[NSJSONSerialization isValidJSONObject:tPayloadData]
isValidJSONObject

返回一个布尔值,该值指示是否可以删除给定对象 转换为JSON数据

给定对象是指
NSArray
NSDictionary
不是
NSData

删除该检查并实现
JSONObjectWithDataoptions:error:

中的error参数问题是这一行

[NSJSONSerialization isValidJSONObject:tPayloadData]
isValidJSONObject

返回一个布尔值,该值指示是否可以删除给定对象 转换为JSON数据

给定对象是指
NSArray
NSDictionary
不是
NSData


删除该检查并实现
JSONObjectWithDataoptions:error:

@luk2302中的error参数问题是JSON响应是stringify,在办公室里,我们总是用JavaScript和C来实现这一点,但我在这方面遇到了问题iOS@luk2302这里您可以更好地解释我们所做的工作:我刚刚编写了一个测试程序,对示例字符串进行反序列化。很好用。我注意到嵌入的unicode转义没有被解码。有意思的是,对
isValidJSONObject
的调用确实返回false。显然,这种方法是错误的。我的建议是只调用
JSONObjectWithData::
,然后检查错误。@Avi你能发布一些代码吗,因为我试图传递我写的字符串[@“{”用户名\“:\“Marco Uzcátegui\”,“Client\”:[{”UserProfileId\“:4,\“ProfileName\”:“平台管理员\”,“客户端名称\:“智能酒店平台\”,“插入\”:true},{”UserProfileId\“:5、\“ProfileName\”:“Administrator\”、\“ClientName\”:“La Moncloa de San Lázaro\”、\“InSession\”:false}、{“UserProfileId\”:6、\“ProfileName\”:“Administrator\”、\“ClientName\”:“Jardín Tecina\”,“InSession\”:false}}“数据使用编码:NSUTF8StringEncoding];但事实并非如此work@luk2302问题是JSON响应是stringify,在办公室,我们一直使用JavaScript和C#来实现这一点,但我在这方面遇到了问题iOS@luk2302这里您可以更好地解释我们所做的工作:我刚刚编写了一个测试程序,对示例字符串进行反序列化。很好用。我注意到嵌入的unicode转义没有被解码。有意思的是,对
isValidJSONObject
的调用确实返回false。显然,这种方法是错误的。我的建议是只调用
JSONObjectWithData::
,然后检查错误。@Avi你能发布一些代码吗,因为我试图传递我写的字符串[@“{”用户名\“:\“Marco Uzcátegui\”,“Client\”:[{”UserProfileId\“:4,\“ProfileName\”:“平台管理员\”,“客户端名称\:“智能酒店平台\”,“插入\”:true},{”UserProfileId\“:5、\“ProfileName\”:“Administrator\”、\“ClientName\”:“La Moncloa de San Lázaro\”、\“InSession\”:false}、{“UserProfileId\”:6、\“ProfileName\”:“Administrator\”、\“ClientName\”:“Jardín Tecina\”,“InSession\”:false}}“数据使用编码:NSUTF8StringEncoding];但它不起作用