1.常用数据解析方式
2.数据解析注意点
-
多值参数和中文输出问题
(1)多值参数如何设置请求路径
//多值参数
/*
如果一个参数名对应着多个值,那么直接按照"参数=值&参数=值"的方式拼接
*/
-(void)test
{
//确定URL
NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/weather?place=Beijing&place=Guangzhou"];
}
(2)如何解决字典和数组中输出乱码的问题
1. 给字典和数组添加一个分类,重写descriptionWithLocale方法,在该方法中拼接元素格式化输出(乱码的中文字符会自动转换,不用额外转换,只要拼接就好)
2. 但是输出格式不如系统方法好,建议输出plist文件兼取所长
```objc
//
// Foundation+Log.m
// 目标解决中文字符输出乱码,但输出格式不如系统,建议输出到plist文件
#import <Foundation/Foundation.h>
@implementation NSDictionary (Log)
- (NSString *)descriptionWithLocale:(id)locale;
{
// 生成可变字符串
NSMutableString *string = [NSMutableString string];
// 拼接"\n{"
[string appendString:@"\n{"];
// 遍历自身键值对
[self enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
// 拼接键值
[string appendFormat:@"\n%@:",key];
[string appendFormat:@"%@;",obj];
}];
//删除最后一个逗号
//NSBackwardsSearch 从后往前搜索
NSRange range = [string rangeOfString:@"," options:NSBackwardsSearch];
if (range.location != NSNotFound) {
[string deleteCharactersInRange:range];
}
// 拼接"\n{"
[string appendString:@"\n}"];
return string;
}
@end
@implementation NSArray (Log)
- (NSString *)descriptionWithLocale:(id)locale
{
// 生成可变字符串
NSMutableString *string = [NSMutableString string];
// 拼接"\n["
[string appendString:@"\n["];
// 遍历自身元素,拼接元素属性
[self enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
[string appendFormat:@"%@,",obj];
}];
//删除最后一个逗号
//NSBackwardsSearch 从后往前搜索
NSRange range = [string rangeOfString:@"," options:NSBackwardsSearch];
if (range.location !=NSNotFound) {
[string deleteCharactersInRange:range];
}
// 拼接"\n]"
[string appendString:@"\n]"];
return string;
}
@end
```
- URL中文转码问题
//1.确定请求路径 NSString *urlStr = @"http://120.25.226.186:32812/login2?username=小码哥&pwd=520it"; NSLog(@"%@",urlStr); //中文转码操作-->二进制数据 urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSLog(@"%@",urlStr); //如果不转码,网络是识别不了URL的 NSURL *url = [NSURL URLWithString:urlStr];