美文网首页
ios JSON解析常见错误

ios JSON解析常见错误

作者: 爱迪生的小跟班 | 来源:发表于2019-05-09 11:19 被阅读0次

    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解析常见错误

          本文链接:https://www.haomeiwen.com/subject/caaioqtx.html