Objective c 用json问题解析阿拉伯语文本
我不熟悉苹果公司的JSON和Objective-c语言。我只是想做些练习之类的 使用yandex.ru翻译api 我试过这个网址 这是从英语到阿拉伯语的翻译。。还好吗 在我的Xcode项目中,我尝试了以下代码 使事情顺利进行Objective c 用json问题解析阿拉伯语文本,objective-c,json,xcode,Objective C,Json,Xcode,我不熟悉苹果公司的JSON和Objective-c语言。我只是想做些练习之类的 使用yandex.ru翻译api 我试过这个网址 这是从英语到阿拉伯语的翻译。。还好吗 在我的Xcode项目中,我尝试了以下代码 使事情顺利进行 NSString *jsonString = [NSString stringWithFormat:@"https://translate.yandex.net/api/v1.5/tr.json/translate?key=trnsl.1.1.20170517T1547
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\U0628\U0627”
)
该值是正确的。它是一个与
NSLog
结合使用的对象(一个数组),它生成显示Unicode标记的输出
首先,JSON对象是一个字典而不是一个数组,Objective-C编译器非常有礼貌,现在不抱怨
NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:data ...
其次,切勿使用valueForKey
从字典中获取单个对象,请使用密钥订阅
NSLog(@"Your JSON Object: %@ Or Error is: %@", dictionary[@"text"], error);
但是,keytext
的值是一个数组。要获取结果字符串,请获取数组中的第一项,您应该检查是否没有错误,以及数组是否为空,以避免超出范围的崩溃
if (error == nil) {
NSArray *result = dictionary[@"text"];
if (result.count > 0) {
NSString *string = result[0];
}
}
现在,当您将字符串
指定给标签或文本视图时,您将获得预期的字符串
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";
- 要转义无效字符,请使用
nsurlpomponents
,它能够以智能方式进行转义:
NSURLComponents *components = [NSURLComponents componentsWithString:jsonString];
NSURL *url = components.URL;
该值是正确的。它是一个与NSLog
结合使用的对象(一个数组),它生成显示Unicode标记的输出
首先,JSON对象是一个字典而不是一个数组,Objective-C编译器非常有礼貌,现在不抱怨
NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:data ...
其次,切勿使用valueForKey
从字典中获取单个对象,请使用密钥订阅
NSLog(@"Your JSON Object: %@ Or Error is: %@", dictionary[@"text"], error);
但是,keytext
的值是一个数组。要获取结果字符串,请获取数组中的第一项,您应该检查是否没有错误,以及数组是否为空,以避免超出范围的崩溃
if (error == nil) {
NSArray *result = dictionary[@"text"];
if (result.count > 0) {
NSString *string = result[0];
}
}
现在,当您将字符串
指定给标签或文本视图时,您将获得预期的字符串
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";
- 要转义无效字符,请使用
nsurlpomponents
,它能够以智能方式进行转义:
NSURLComponents *components = [NSURLComponents componentsWithString:jsonString];
NSURL *url = components.URL;