只有从Json中提取的第一个字母

时间:2015-04-07 08:39:43

标签: ios objective-c 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

2 个答案:

答案 0 :(得分:0)

需要代码。 [有代码!感谢]

但是,你可以做的事情:

  • 尝试在发生的行上设置断点,并检查变量以查看是否所有内容都已存在。

  • 你是如何解码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在本地进行了测试,我得到了#34; Joey&#34;正常。

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

答案 1 :(得分:0)

尝试在stringValue

的末尾添加[response objectForKey:@"name"]

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