我对苹果的JSON和Objective语言很陌生。我只是想练习一下
使用yandex.ru转换api
我试过这个URL
把(你好)从英语翻译成阿拉伯语。仍然很好
在我的Xcode项目中,我尝试了这段代码来使事情正常工作。
NSString *jsonString = [NSString stringWithFormat:@"https://translate.yandex.net/api/v1.5/tr.json/translate?key=trnsl.1.1.20170517T154730Z.927d87b76de60242.7a92e4612778a4838d40ab192df5297d2a1af4ed&text=Hello&lang=ar"];
jsonString = [jsonString stringByReplacingOccurrencesOfString:@" " withString:@"%20"];
NSURL *url=[NSURL URLWithString:jsonString];
NSData *data=[NSData dataWithContentsOfURL:url];
NSError *error=nil;
//NSLog(@"%@",dictionary);
NSArray* dictionary = [NSJSONSerialization JSONObjectWithData:data
options:kNilOptions
error:&error];
NSLog(@"Your JSON Object: %@ Or Error is: %@", [dictionary valueForKey:@"text"], error);
NSString*string = [NSString stringWithFormat:@"%@",[dictionary valueForKey:@"text"]];
在这里之前没问题..。但是它在日志上返回一个错误的值,而不是(مرحبا)
您的JSON对象:(“U0645\U0631\U062d\U 0628\U0627”)
发布于 2017-05-17 08:32:22
这个值是正确的。它是一个对象--一个数组--与NSLog
一起产生的显示Unicode令牌的输出。
首先,JSON对象是一个字典而不是数组,object编译器现在很礼貌地不抱怨。
NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:data ...
其次,不要使用valueForKey
从字典中获取单个对象,使用键订阅
NSLog(@"Your JSON Object: %@ Or Error is: %@", dictionary[@"text"], error);
但是,键text
的值是一个数组。要获得结果字符串,获取数组中的第一项,您应该检查是否有错误,以及数组是否为空,以避免超出范围的崩溃。
if (error == nil) {
NSArray *result = dictionary[@"text"];
if (result.count > 0) {
NSString *string = result[0];
}
}
现在,当您将string
分配给标签或文本视图时,您将得到预期的مرحبا
。
PS:您的代码的另外两个改进:
stringWithFormat
NSString *jsonString = @"https://translate.yandex.net/api/v1.5/tr.json/translate?key=trnsl.1.1.20170517T154730Z.927d87b76de60242.7a92e4612778a4838d40ab192df5297d2a1af4ed&text=Hello&lang=ar";NSURLComponents
,它可以智能地执行此操作:
NSURLComponents *components = NSURLComponents componentsWithString:jsonString;https://stackoverflow.com/questions/44029989
复制相似问题