2 ly568048459 ly568048459 于 2016.02.29 15:10 提问

Android Gson解析boolean错误

今天突然出现了这种怪异的现象,我使用gson来解析服务器返回的json数据,json中有个字段isSuccess,是boolean类型,今天在请求的时候始终得不到正确的回应,一调试才知道isSuccess为false,但是返回的json中isSuccess是为true的,这种情况也不是每次都会发生,有时候又是正常的,服务器返回的json也是一样的,但是就会出现isSuccess会被解析成false的情况,有人遇到过这种情况吗?

发现了新的情况,我手动截取json中isSuccess字段,然后使用Boolean.valueOf(String)来转换,但是怪异的情况出现了,String参数为true,转换出来的value确实false,彻底凌乱了

我换了个方法,不用Boolean.valueOf(String)了,自己判断字符串来转换为true或者false,倒是不会出现这个问题了,不过上述问题留在这,等待大神来解答

找到问题所在了,我这里有个功能需要用到反射,我用反射取了Boolean.value,因为是private final修饰符,所以用了函数Field.setAccessible(true),然后通过反射的方法给Boolean.value设置了值,结果后面Boolean无论怎么赋值都是前面设置的那个值了,所以在反射给Boolean.value设置了值后,要调用Field.setAccessible(false)就可以了,次奥,恼火啊

2个回答

menglele1314
menglele1314   2016.02.29 16:42

手写json直接的数据传递一般都是字符串,在更具字符串转换成你要的数据类型,比如null......

qq_24885195
qq_24885195 回复ly568048459: 遇到同样的问题了 求指导
8 个月之前 回复
ly568048459
ly568048459 也许我描述得不清楚,举个例子吧{"isSuccess":true},这个就是服务器返回给我的json,客户端在转换为结构体的时候字段isSuccess就为false了,后来我手动截取了json中isSuccess字段,值为"true",通过Boolean.valueOf(String)来转换为boolean类型,但是转换出来却是false,怪异吧
2 年多之前 回复
ly568048459
ly568048459   2016.03.01 22:49

上面的结论是错误的,Field.setAccessible(true)后Boolean.value再也不能接受新值了

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Gson解析boolean值的注意
public class GsonUtils { public static T changeGsonToBean(String gsonString, Class cls) { Gson gson = new Gson(); T t = gson.fromJson(gsonString, cls); return t; }}
简单的gson对boolean转换的test(作为备注)
GsonBooleanTest.javapackage com.test;import java.io.IOException;import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonSyntaxException; import com.google.gson.TypeA
【踩坑】boolean类型字段序列化问题
我们的测试thrift接口时,测试case都是json格式的文件,然后gson反序列化,生成为对应的入参类,调用thrift接口,获取返回结果。有次有个需求,是接口新增了一个boolean类型的入参字段,若该字段为true,接口才会正确返回。依照惯例,测试case里将新加的入参字段在json里设值,"isGiftcard":true;然而返回结果并不正确。断点看我这边的请求确实是将该字段设置为tr...
GSON转换报错
关于GSON转换时的JsonSyntaxException错误com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $今天在做Android接收服务器回馈的数据转义的时候突然报了如下的错误:
Android Gson解析复杂多重数据过程及错误排查
最近在做天气预报的项目,需要用到多重JSON的解析,这里我选用了目前流行的,也公认是最简单易用的框架GSON来解析这个复杂的JSON,虽然在最后结果很简单,但并不意味着整个过程很简单,没有一点问题,恰恰是相反的,我是第一次学习这个GSON,虽然在网上看博客一看即知怎么操作,但是一动手,却发生问题还是有的。      首先,先上我的JSON结构:   {"desc":"OK","status"
Android之Gson时间格式不一致导致后台解析错误问题
采用Gson封装Json数据与后台进行交互,Android端与后台接口通常对数据中的Date格式需要做统一处理,这样就能保证Gson正常解析。但在不同的jdk版本的环境中,这样处理也不能百分百保证没有问题,笔者在实践中就遇到这样的问题:后台的Gson解析方法只能接受12时制的时间格式,24时制的时间解析发生错误。 这是24时制,后台解析失败导致业务处理失败: {"date":"Aug
解决gson解析类型不对数据crash
问题 线下与后端联调时无异常,因为数据都是按着接口文档给的。但是有时到了线上,数据格式会因为一些脏数据,后端在返回数据时直接返回了不按接口格式给的数据结构。我们经常遇到的就是定义了 {}对象,给了[]数据,或者反过来,又或者数字类型返回了非数字类型等。造成了gson解析时报异常。 gson解析原理   注册定义好的TypeAdapter(gson自定定义了很多了,我们也可以自己定义(
Android 中Json解析的几种框架(Gson、Jackson、FastJson、LoganSquare)使用与对比
介绍 移动互联网产品与服务器端通信的数据格式,如果没有特殊的需求的话,一般选择使用JSON格式,Android系统也原生的提供了JSON解析的API,但是它的速度很慢,而且没有提供简介方便的接口来提高开发者的效率和降低出错的可能。因此,通常情况下,我们都会选择其他优秀的JSON解析实现,用以替代系统的API,目前JSON解析的开源实现主要包括一下几种: Gson JackJson FastJ
Gson 解析错误:Expected BEGIN_ARRAY but was BEGIN_OBJECT
解析错误: Expected BEGIN_ARRAY but was BEGIN_OBJECT { “msg”: “绑定成功!”, “code”: “0”, “data”: { “isbind”: “0” } } 你的解析: public class GTResult {@Expose public String msg; @E
GSON解析json数据详解
GSON JSON 介绍 Gson 下载 Gson 解析 和 格式化 Gson 格式化 Gson 解析 Json 介绍 Json 全称 JavaScript Object Natation ,用来描述数据结构,它是基于纯文本的数据格式,是一种轻量级的数据交换格式。广泛应用于 服务端 与 客户端 的数据交互。 格式 Json 以 ke