We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
主要还是处理现实项目中的问题,最近碰到一点点小问题。 调试过来的报文还要分两批解析,把内容单独转义下丢data字段。 比如下面
{"success":1,"data":"{\"acSessionId\":\"\",\"szTermType\":\"HUAWEI IdeaHub Pro\"}"}
我们知道嵌入了转义符号,直接转json肯定不行。
现场就是要快,解决问题是第一位,所以有了如下版本
static final CharSequence old = "\\"; static final CharSequence target = ""; public <T> T parseData(Class<T> classOfData){ String dataJson = data.replace( old,target ); Logger.i( "dataJson:%s",dataJson ); return gson.fromJson( dataJson,classOfData ); }
代码比较粗暴,但是解决问题了,能解决问题的代码就是好代码
毛版是能解决问题,问题就是太糙了。万一我内容里面真的有\的文字怎么办,不是一起被“干掉”了。 翻了下网上的解决方案 安卓就是这个好属于JAVA子集,很多JAVA包可以直接拿来用,有时觉得JAVA已经很完善了,折腾什么Kotlin,谷歌这样搞明显过河拆桥太不仗义。
// https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 implementation 'org.apache.commons:commons-lang3:3.12.0'
推荐这个包使用这个类
结果一看 as of 3.6, use commons-text StringEscapeUtils instead
implementation 'org.apache.commons:commons-text:1.9' 换另外一个包
implementation 'org.apache.commons:commons-text:1.9'
public <T> T parseData(Class<T> classOfData){ //String dataJson = simpleTranslate(data); String dataJson = StringEscapeUtils.unescapeJava(data); Logger.i( "dataJson:%s",dataJson ); return gson.fromJson( dataJson,classOfData ); } private String simpleTranslate( String orgString ){ return data.replace( old,target ); }
好吧simpleTranslate可以扫进垃圾堆里面去了。
public static final CharSequenceTranslator ESCAPE_JAVA; static { final Map<CharSequence, CharSequence> escapeJavaMap = new HashMap<>(); escapeJavaMap.put("\"", "\\\""); escapeJavaMap.put("\\", "\\\\"); ESCAPE_JAVA = new AggregateTranslator( new LookupTranslator(Collections.unmodifiableMap(escapeJavaMap)), new LookupTranslator(EntityArrays.JAVA_CTRL_CHARS_ESCAPE), JavaUnicodeEscaper.outsideOf(32, 0x7f) ); }
Translator会逐字解析。具体算法就不细看了
The text was updated successfully, but these errors were encountered:
update to #147
2127b48
No branches or pull requests
前言
主要还是处理现实项目中的问题,最近碰到一点点小问题。
调试过来的报文还要分两批解析,把内容单独转义下丢data字段。
比如下面
我们知道嵌入了转义符号,直接转json肯定不行。
“毛版”去转义
现场就是要快,解决问题是第一位,所以有了如下版本
代码比较粗暴,但是解决问题了,能解决问题的代码就是好代码
“文艺版”去转义
毛版是能解决问题,问题就是太糙了。万一我内容里面真的有\的文字怎么办,不是一起被“干掉”了。
翻了下网上的解决方案
安卓就是这个好属于JAVA子集,很多JAVA包可以直接拿来用,有时觉得JAVA已经很完善了,折腾什么Kotlin,谷歌这样搞明显过河拆桥太不仗义。
推荐这个包使用这个类
结果一看
as of 3.6, use commons-text StringEscapeUtils instead
implementation 'org.apache.commons:commons-text:1.9'
换另外一个包
好吧simpleTranslate可以扫进垃圾堆里面去了。
看一看内部实现
Translator会逐字解析。具体算法就不细看了
The text was updated successfully, but these errors were encountered: