- (IBAction)updating:(id)sender {
NSString *string = [NSString stringWithFormat:@"https://api.heweather.com/x3/weather?cityid=CN101180503&key=MY_API_ID"];
NSURL *url = [NSURL URLWithString:string];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
operation.responseSerializer = [AFJSONResponseSerializer serializer];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
//ResponseObject is dictionary
NSMutableDictionary *dictionary = responseObject;
NSArray *array = dictionary[@"HeWeather data service 3.0"];
NSDictionary *dicBasic = [array valueForKey:@"basic"];
NSData *city = [dicBasic valueForKey:@"city"];
NSLog(@"%@", city);
NSString *latitude = [dicBasic valueForKey:@"lat"];
NSLog(@"%@", latitude);
} failure:^(AFHTTPRequestOperation * _Nonnull operation, NSError * _Nonnull error) {
NSLog(@"Nothing ");
}];
当我运行单件代码时,除了城市名称之外,每一件都是正常的,
我想我需要从JSON文件中解码这个城市的名字,因为这个城市的名字是中文的。
以下是一个例子:
2016-07-23 15:36:55.825 weatherDemo [2865:1189546](" \ U5b9d \ U4e30")2016-07-23 15:36:55.825 weatherDemo [2865:1189546](& #34; 33.908000"
我该如何处理?
答案 0 :(得分:1)
在调查问题后。我想通了,它完全是关于响应对象的数据结构。
尝试使用以下代码获取所需内容:
NSDictionary *responseDic = [[(NSDictionary *)responseObject objectForKey:@"HeWeather data service 3.0"] firstObject];
NSDictionary *basicDic = [responseDic objectForKey:@"basic"];
NSString *cityStr = [basicDic objectForKey:@"city"];
NSLog(@"%@", cityStr);
答案 1 :(得分:0)
首先,我打算投入相当多的资金
dictionary[@"HeWeather data service 3.0"]
不是数组。然后你使用valueForKey。任何使用valueForKey都表明你不知道自己在做什么。 valueForKey不关心它是什么类型的对象。我假设编译器告诉你不能使用
array [@"basic"]
而不是修复你明显的bug,你找到了最糟糕的解决方法。
您的实际问题根本不是问题。 JSON处理中文字符就好了。但是你看到NSLog会输出它们。这是NSLog(这是一个调试工具)的问题。字符串中的数据绝对正常。将它们放入标签或文本字段中,它们将被绘制得很好。
PS。只要您收到的回复不符合您的预期,您的应用就会崩溃。如果不检查您获得的项目实际上是您期望的类型,解析JSON绝对是不负责任的。