只有Json的第一封信



我的iOS应用程序突然出现了一个非常奇怪的问题。我过去常常从服务器接收Jsons,并从中提取一些信息。除了一个用户帐户:我只得到属性的第一个字符外,一切都很完美。

例如,如果Json是这样的:

{
    name : "Joey"
}

我提取name属性,得到字符串"J"。我必须准确地说,它与所有其他用户帐户完美配合。

我在考虑编码问题?

提前感谢您的回答。

编辑:

以下是我如何获得服务器的响应:

+ (void)getDataFromServ:(NSString *)urlServ withCompletionHandler:(void (^)(NSDictionary *dataDic))completion {
   NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlServ]];
   [request setHTTPMethod:@"GET"];
   NSURLSession *session = [NSURLSession sharedSession];
   NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler: ^(NSData *data, NSURLResponse *response, NSError *error) {
       if (error) {
           return;
       }
       NSDictionary *serDataDic = nil;
       NSError* parseError;
       if (data) {
           serDataDic = [NSJSONSerialization JSONObjectWithData:data options:0 error:&parseError];
           completion(serDataDic);
       }
   }];
   [task resume];
}

以下是我如何处理响应:

...
[self getDataFromServ:urlServ withCompletionHandler:^(NSDictionary *dataDic) {
        NSDictionary *response = [dataDic objectForKey:@"data"];
        NSLog(@"Response : %@", response);
        NSLog (@"Name : %@", [response objectForKey:@"name"]);
...
}

以下是相关日志:

Response : 
{
    name = "Joey";
}
Name : J

编辑2:

我刚刚注意到的另一件事是,当我提取一个属性并计算其长度时,长度比该属性长。例如,当我有一个包含15个字符的属性时,计算的长度为29,但该属性仍然只显示一个字符。

编辑3:

我测试了其他东西:

for (NSInteger j = 0; j < displayNameStr.length; j++) {
                            NSLog(@"displayname : %@, j : %d", [nameExtracted substringFromIndex:j], j);                        
}

2015-04-07 11:25:34.778 myApp[434:131660] displayname : A
2015-04-07 11:25:34.778 myApp[434:131660] displayname :
2015-04-07 11:25:34.779 myApp[434:131660] displayname : l
2015-04-07 11:25:34.779 myApp[434:131660] displayname :
2015-04-07 11:25:34.779 myApp[434:131660] displayname : l
2015-04-07 11:25:34.780 myApp[434:131660] displayname :
2015-04-07 11:25:34.780 myApp[434:131660] displayname : a
2015-04-07 11:25:34.781 myApp[434:131660] displayname :
2015-04-07 11:25:34.781 myApp[434:131660] displayname : i
2015-04-07 11:25:34.781 myApp[434:131660] displayname :
2015-04-07 11:25:34.782 myApp[434:131660] displayname : n
2015-04-07 11:25:34.782 myApp[434:131660] displayname :
2015-04-07 11:25:34.783 myApp[434:131660] displayname : o
2015-04-07 11:25:34.784 myApp[434:131660] displayname :
2015-04-07 11:25:34.784 myApp[434:131660] displayname : u
2015-04-07 11:25:34.788 myApp[434:131660] displayname :
2015-04-07 11:25:34.788 myApp[434:131660] displayname :  D
2015-04-07 11:25:34.789 myApp[434:131660] displayname : D
2015-04-07 11:25:34.789 myApp[434:131660] displayname :
2015-04-07 11:25:34.789 myApp[434:131660] displayname : u
2015-04-07 11:25:34.790 myApp[434:131660] displayname :
2015-04-07 11:25:34.790 myApp[434:131660] displayname : p
2015-04-07 11:25:34.790 myApp[434:131660] displayname :
2015-04-07 11:25:34.791 myApp[434:131660] displayname : r
2015-04-07 11:25:34.791 myApp[434:131660] displayname :
2015-04-07 11:25:34.792 myApp[434:131660] displayname : a
2015-04-07 11:25:34.792 myApp[434:131660] displayname :
2015-04-07 11:25:34.792 myApp[434:131660] displayname : -
2015-04-07 11:25:34.793 myApp[434:131660] displayname :
2015-04-07 11:25:34.793 myApp[434:131660] displayname : B
2015-04-07 11:25:34.794 myApp[434:131660] displayname :
2015-04-07 11:25:34.794 myApp[434:131660] displayname : e
2015-04-07 11:25:34.794 myApp[434:131660] displayname :
2015-04-07 11:25:34.795 myApp[434:131660] displayname : l
2015-04-07 11:25:34.795 myApp[434:131660] displayname :
2015-04-07 11:25:34.795 myApp[434:131660] displayname : l
2015-04-07 11:25:34.796 myApp[434:131660] displayname :
2015-04-07 11:25:34.796 myApp[434:131660] displayname : a
2015-04-07 11:25:34.798 myApp[434:131660] displayname :
2015-04-07 11:25:34.798 myApp[434:131660] displayname : n
2015-04-07 11:25:34.798 myApp[434:131660] displayname :

该名称的属性为:Allainou Dupra bellan

需要的代码。[收到代码!谢谢]

但是,你可以做的事情:

  • 尝试在发生的行上放置一个断点,并检查变量以查看是否所有内容都在那里。

  • 您是如何解码JSON的?试着看看你是否没有以你不应该的方式获得字符串。

  • 使用HTTP(S)代理应用程序查看来自服务器的数据(Fiddler、Charles proxy、Wireshark)。

编辑:一切似乎都很好。。。奇怪的结果。但是,由于不遵守规范可能会导致奇怪的结果,请尝试:

替换:

serDataDic = [NSJSONSerialization JSONObjectWithData:data options:0 error:&parseError];

带有:

serDataDic = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingMutableContainers error:&parseError];

我不认为这是问题的根源,但值得一试。

另外,你能给我们从服务器上得到的整个JSON字符串吗?我用你提供的JSON在本地测试了它,我正确地得到了"Joey"。

编辑2:在你奇怪的长度结果之后,我肯定会检查服务器的响应。问题似乎不在你的Objective-C代码上。

尝试在[response objectForKey:@"name"]:的末尾添加一个stringValue

[[response objectForKey:@"name"] stringValue]

最新更新