过滤并清除json中的注释字段
我们的后台习惯在接口文档的json示例中直接添加注释,有时候测试环境不满足条件无法测试某部分数据,使用接口文档中的json直接转换成模拟数据就相当方便,但是注释和一些不符合的数据要手动逐一修改。为此做了一个过滤特殊字段的方法。
我在这篇文章中查找到了关于过滤非法字段的方法,但是还是不能满足过滤注释的需求。
比如下面一段json
"data": {
"id": "7",
"type": "1", // 类型:1-会议 2-活动
"time": "2018-12-10 11:12", // 日期
"content": "会议内容", // 事项
"remark": "会议备注", // 事项备注
...
}
...
- 过滤方法
///读取模拟接口文档数据
- (NSDictionary *)readInterfaceValue {
//文件路径
NSString *path = [[NSBundle mainBundle] pathForResource:@"jsonValue" ofType:@"txt"];
//带有注释的json文本
NSString *allStr = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
NSScanner *myScanner = [NSScanner scannerWithString:allStr];//扫描
NSString *annotStr = nil;
NSString *jsonStr = allStr;
while ([myScanner isAtEnd] == NO) {
//开始扫描
[myScanner scanUpToString:@"//" intoString:NULL];
[myScanner scanUpToString:@"\n" intoString:&annotStr];
//将结果替换
//注意 这样写jsonStr = [jsonStr stringByReplacingOccurrencesOfString:annotStr withString:@""]; 无法区分json中的”// 事项“和”// 事项备注“ 两个注释
jsonStr = [jsonStr stringByReplacingOccurrencesOfString:[NSString stringWithFormat:@"%@\n", annotStr] withString:@"\n"];
}
if (jsonStr == nil) {return nil;}
NSData *jsonData = [jsonStr dataUsingEncoding:NSUTF8StringEncoding];
NSError *error;
NSDictionary *resultDic = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error];
if(error) {
NSLog(@"json解析失败:%@",error);
return nil;
}
return resultDic;
}