php 后台返回[ ],使用 Gson解析成 Object 报错的解决
来源:互联网 发布:java文本相似度 tfidf 编辑:程序博客网 时间:2024/05/19 12:40
本工具类主要解决:
[ ] 转换成 Object、String 报错
{ } 转换成 Arraylist、Array、String 报错
“”转换成 Object、Arraylist、Array 报错
这些转换都可以正常解析,使用方法
JsonReader jsonReader = new XinJsonReader(new StringReader(stringJson)); jsonReader.setLenient(true); new Gson().fromJson(jsonReader, clazz)
package com.xin;import com.google.gson.stream.JsonReader;import com.google.gson.stream.JsonToken;import java.io.IOException;import java.io.Reader;/** * 空 [] {},"" 可以相互转型 */public class XinJsonReader extends JsonReader { private JsonToken mPeek; public XinJsonReader(Reader in) { super(in); } @Override public void beginObject() throws IOException { try { super.beginObject(); } catch (IllegalStateException e) { beginPeek(mPeek = peek()); } } @Override public void beginArray() throws IOException { try { super.beginArray(); } catch (IllegalStateException e) { mPeek = peek(); beginPeek(mPeek = peek()); } } @Override public String nextString() throws IOException { try { return super.nextString(); } catch (IllegalStateException e) { JsonToken peek = peek(); beginPeek(peek); endPeek(peek); return ""; } } @Override public boolean hasNext() throws IOException { boolean hasNext = super.hasNext(); if (mPeek != null) {//如果调用 begin 的时候 [],{} "" 服务器返回数据结构算合理的 if (mPeek == JsonToken.STRING) {//如果是""没有下一个了 hasNext = false; } if (hasNext) {//如果 [],{}中间有值 认定服务器返回数据结构有问题。抛出异常 throw new IllegalStateException("服务器返回类型错误,无法修正 " + peek() + getPath()); } } return hasNext; } @Override public void endObject() throws IOException { if (mPeek == null) {//正常情况 super.endObject(); } else {//结束[],{} 的解析 endPeek(mPeek); mPeek = null; } } @Override public void endArray() throws IOException { if (mPeek == null) {//正常情况 super.endArray(); } else {//结束[],{} 的解析 endPeek(mPeek); mPeek = null; } } private void beginPeek(JsonToken peek) throws IOException { switch (peek) { case BEGIN_ARRAY: super.beginArray(); break; case BEGIN_OBJECT: super.beginObject(); break; case STRING: String s = super.nextString(); if (s != null && !"".equals(s.trim())) {//如果 "" 中间有值,服务器返回类型有问题 throw new IllegalStateException("服务器返回类型错误,无法修正 " + peek() + getPath()); } break; } } private void endPeek(JsonToken peek) throws IOException { switch (peek) { case BEGIN_ARRAY: super.endArray(); break; case BEGIN_OBJECT: super.endObject(); break; case STRING: break; } }}
阅读全文
0 0
- php 后台返回[ ],使用 Gson解析成 Object 报错的解决
- 使用Gson解析报错
- Gson解析报错
- Gson解析报错解决方案
- 在okHttp里使用Gson解析 报错OKHttp Dispatcher
- 今天使用gson json字符串转对象的时候,一直报错Unterminated object at line 1 column 14
- 使用Gson解析Retrofit返回结果
- 使用gson配合Retrofit2解析服务器返回
- 使用Gson轻松解决复杂结构的Json数据解析
- 使用Gson轻松解决复杂结构的Json数据解析
- Gson解析工具类----解决某些手机Object两个属性引起的异常
- 解析后台返回的XML
- Gson 解析json的使用
- JSON解析 Gson的使用
- 解决Gson解析Date数据格式的问题
- 如何使用gson解析泛型形参并返回相对应的类
- Android使用GSON和FASTJSON解析服务器返回的JSON数据
- PHP解析Gson生成的Json数组
- 字符串排序(指针)
- Linux中的常用操作命令
- elasticsearch-java api之搜索(二)——聚合
- eclipse启动卡死的问题
- 最小划分-LintCode
- php 后台返回[ ],使用 Gson解析成 Object 报错的解决
- Eclipse导入Android工程报错 Invalid project description
- 关于对话机器人,你需要了解这些技术
- BZOJ2618 凸多边形 半平面交
- 《TensorFlow官方文档》快速入门
- Unity编辑器扩展:如何把asset 格式的资源转成png
- centos7.2用yum安装mysql
- SMB 案例
- 682. Baseball Game