ios JSON解析常见错误

1、 JSON数据带有转义字符

iOS现有Json解析框架+ ( id)JSONObjectWithData:options: error:
不支持对非标准格式Json的处理(特殊字符包括“\“ 、 ”\n“、 ”\r“等)

如:

{
    \"data\":[
        {
          \"ReqCmd\":\"S3\",
          \"Params\":{
              \"authnum\":\"13815873815\"
          }
      }
   ]
}

处理办法:1、将带有转义字符的数据转成字典(标准的JSON格式)再进行解析
2、用“\“进行转义

2、 返回数据值为NSNULL、null、nil等

方案解决:
1。「 从根源上与API协调,尽量禁止返回值为NSNULL、null、nil这样的值。
2。「 客户端做处理,处理值为NSNULL、null、nil的情况。或者对消息进行转发 避免由于返回值有误导致程序崩溃的情况

3、 编码不一致问题

问题:
前后端编码不一致导致解析后的值乱码、解析不了json数据、报错等。
解决方案:1、与后台规定好统一编码;2、客户端进行编码转换;

4、 浮点型数据解析后小数溢出问题

问题:
JSON数据中的浮点型值,用系统方法NSJSONSerialization
解析为字符串后,出现精度误差
解决方案:
1。「 后台以字符串形式返回
2。「 解析时数据格式化,明确转成doubleValue类型,如下:
NSString *value=[NSString stringWithFormat:@"%f",[dic[@"number"] doubleValue]];

5、 NSJSONSerialization解析JSON数字时的类型不一致

如下数据解析
json局部数据这样的:{"content_id" : "666"}
NSString name = dic[@"content_id"]; 这句会产生类型错误
虽然是"666"这样的数字字符串,但还是要当成id类型stringWithFormat一下
NSString name = [NSString stringWithFormat:@"%@",dic[@"content_id"]];

6、 保证JSON数据中的key值都是String类型。

如果JSON数据的key值为非String类型用NSJSONSerialization
解析会找不到key而报错:

7、 JSON解析boolean类型数据字段时结果错误

BOOL manage = [content objectForKey:@"manage"];
上面结果无论JSON数据中manage字段是0还是1,manage都为YES。
用BOOL接收JSON字段时,需要增加boolValue转换:
BOOL manage = [[content objectForKey:@"manage"] boolValue];

你可能感兴趣的:(ios JSON解析常见错误)