python 解析json数据遇到点事坑_JSON 解析中遇到的坑

最近做加解密遇到一个很“奇葩的问题”,解析服务端加密后的字符串 序列化 时一直报错 "json解析失败:Error Domain=NSCocoaErrorDomain Code=3840 "Garbage at end." UserInfo={NSDebugDescription=Garbage at end.}"

既然出现问题就开始找原因,根据错误分析原因,大概是 JSON 格式字符串有问题,搜了很多答案,被误导了。

本身使用 AES 解密后打印出来的 JSON 字符串是

{"UserId":"D6BA8FE3-9BBB-40F2-BC04-2CC5BCF2B353","Code":"","Account":"","RealName":"Robin","Spell":null,"Gender":"男","Mobile":"","Telephone":null,"Email":null,"WeChat_ID":null,"CompanyId":"31b05701-60ef-405c-87ba-af47049e3f48","CompanyName":"","DepartmentId":"52b73532-56ff-4db0-810e-9a915a5decf5","DepartmentName":"研发部","PostName":"","Enabled":"","Remark":null}

使用 JSON 格式化也没有任何问题,但是使用下面系统自带方法一直转换失败:

- (id)dictionaryWithJsonString:(NSString *)jsonString {

if (jsonString == nil) {

return nil;

}

NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];

NSError *err;

id dic = [NSJSONSerialization JSONObjectWithData:jsonData

options:NSJSONReadingMutableContainers

error:&err];

if(err) {

CSLog(@"json解析失败:%@",err);

return nil;

}

CSLog(@"decryptResponse = %@", dic);

return dic;

}

报错信息是说 JSON 后面有垃圾后缀。跟服务端同事沟通,他们一口咬定数据没问题,让客户端解决。

推测几种可能性:

刚开始怀疑是编码问题,但是编码方式一致,排除;

后来怀疑是 服务端 设置了 "\0" 或者转义问题,但是对方不配合。。。只能这边进行转换,试了以下几种方式:

jsonString = [jsonString stringByReplacingOccurrencesOfString:@"\r\n" withString:@""];

jsonString = [jsonString stringByReplacingOccurrencesOfString:@"\n" withString:@""];

jsonString = [jsonString stringByReplacingOccurrencesOfString:@"\t" withString:@""];

jsonString = [jsonString stringByReplacingOccurrencesOfString:@"\\" withString:@""];

后来选择把 字符串中 的 "null" 转换以下:

jsonString = [jsonString stringByReplacingOccurrencesOfString:@":null"withString:@":"""];

后来解析还是失败。。。

后来调试时发现:

89659ce9bccf1618cd525daaf5405412.png

后面"}"多了 "\0\0\0\0\0",所以解析失败:正常的如下:

486c671eae7196a6e8abcc7dbc0e4540.png

猜想应该是服务端给的数据经过客户端解密过程中出现了问题,开始查找解密算法问题:http://tool.chacuo.net/cryptaes

比对 AES 的加密模式,填充,数据块,密码,向量,输出,字符集等参数,果然是数据 填充 枚举两端不一致导致的,修改后,解析正常。

坑总结:控制台打印出来的数据自动进行了转化,看不到完整的错误数据,不方便定位问题。

dotnet 手动解决 json 解析中不合法字符串

如果使用 Newtonsoft Json 解析字符串,字符串里面有不清真的格式,那么默认的解析将会炸掉.如果想要自己解决字符串中的不清真格式,可以使用传入 JsonSerializerSettings ...

关于json解析中 解析多重json对象

JSONObject rst = {"AIS-RST":"AIS-00000001","AIS-STATUS":"AIS-0000 ...

iOS json解析中包含“\n”等解析出错

文题算是解决了,把特殊字符替换一下:-(NSString *)JSONString:(NSString *)aString {    NSMutableString *s = [NSMutableSt ...

超详细JSON解析步骤

JSON简介 JAVAScript Object Notation是一种轻量级的数据交换格式 具有良好的可读和便于快速编写的特性. 业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了 ...

IOS中Json解析的四种方法

作为一种轻量级的数据交换格式,json正在逐步取代xml,成为网络数据的通用格式. 有的json代码格式比较混乱,可以使用此“http://www.bejson.com/”网站来进行JSON格式化校验 ...

python 中的json解析库

当一个json 数据很大的时候.load起来是很耗时的.python中常见的json解析库有cjson,simplesjson,json, 初步比较了一下, 对于loads来讲 simplejson ...

Json--Android中数据文件解析(Json解析--从服务器端获取数据并且解析,显示在客户端上面)

前面学习过了使用SAX解析XML数据(点击进入:SAX解析XML数据),今天学习Json解析: 首先说一下Json数据的最基本的特点,Json数据是一系列的键值对的集合,和XML数据来比,Json数据 ...

java中转换json方式(JSONArray,JSONObject),json解析

package com.yunos.tv.video.resource.controller.web; import java.util.ArrayList; import java.util.Has ...

我的Android进阶之旅------>解决Jackson、Gson解析Json数据时,Json数据中的Key为Java关键字时解析为null的问题

1.问题描述 首先,需要解析的Json数据类似于下面的格式,但是包含了Java关键字abstract: { ret: 0, msg: "normal return.", news: ...

随机推荐

动态调用WebService

WebService内容 using Microsoft.CSharp;using System;using System.CodeDom;using System.CodeDom.Compiler; ...

js弹出框,禁刷新

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值