android中gson解析怎样防止参数确实

author author     2023-05-03     736

关键词:

参考技术A

最近在做天气预报的项目,需要用到多重JSON的解析,这里我选用了目前流行的,也公认是最简单易用的框架GSON来解析这个复杂的JSON,虽然在最后结果很简单,但并不意味着整个过程很简单,没有一点问题,恰恰是相反的,我是第一次学习这个GSON,虽然在网上看博客一看即知怎么操作,但是一动手,却发生问题还是有的。

首先,先上我的JSON结构:

"desc":"OK","status":1000,"data":"wendu":"15","ganmao":"昼夜温差很大,易发生感冒,请注意适当增减衣服,加强自我防护避免感冒。","forecast":["fengxiang":"南风","fengli":"微风级","high":"高温 16℃","type":"晴","low":"低温 2℃","date":"14日星期二","fengxiang":"南风","fengli":"微风级","high":"高温 16℃","type":"多云","low":"低温 4℃","date":"15日星期三","fengxiang":"南风","fengli":"微风级","high":"高温 17℃","type":"多云","low":"低温7℃","date":"16日星期四","fengxiang":"南风","fengli":"微风级","high":"高温16℃","type":"阴","low":"低温 5℃","date":"17日星期五","fengxiang":"南风","fengli":"微风级","high":"高温 19℃","type":"晴","low":"低温 5℃","date":"18日星期六"],"yesterday":"fl":"微风","fx":"南风","high":"高温 14℃","type":"晴","low":"低温 2℃","date":"13日星期一","aqi":"38","city":"北京"

在实现时,我是有进行过分层的,这里,我就忽略了……

首先,照着网上一个简单的教程,我把JAVABEAN,设置成这样:

CSDN:CODE:public class TestBean
public String desc;
public int status;
public List<Data> data;
public class  Data
public String wendu;
public String ganmao;
public List<Forecast> forecast;
public List<Yesterday> yesterday;
public String aqi;
public String city;
public class  Forecast
public String fengxiang;
public String fengli;
public String high;
public String type;
public String low;
public String date;
public class Yesterday
public String fl;
public String fx;
public String high;
public String type;
public String low;
public String date;

这里有两个点想说的,正确的是,一是成员变量名一定是跟JSON的字段完全一样的,那个没有“”的数字数据的话要用int,我一开始照着网上模仿这个,把内层的数据都用一个List<内部类名称>来表示。结果是失败的。

接着,我把代码又拆成了网上分多个类出来,每个类都加多一个getter和setter,我本着大脑想,或许上个想得过于简单,可能系统还需要重写toString方法,而且这些都是有规矩的。

如下图:



好吧,还是不行,胡打乱闯之下,回归了理性,我开始读Log,来分析其中的错误:

这里事实上只看第一个错误即可:Expected BEGIN_ARRAY but was BEGIN_OBJECT at…… data 

由最后一个我们知道要定位到data变量所对应的类中去(对着我的JSON代码来看问题),我仔细看了一下第一个类,类中我有这个

public List<Data> data

但是,事实上data里只有一个数据,也就是这里只有一个对象需要被创建。

然后,我试运行了一下,发现错误还是有,但是变了(这里很关键),这说明确实这里是有问题的。

//   public List<Forecast> forecast;//    public List<Yesterday> yesterday;

在错误中,又把错误指向Yerterday。结合一下我的JSON格式,发现,在Yesterday这里,又只有一个所以只生成一个对象,而Forecast却不止。所以又把代码改了。

public List<Forecast> forecast;public Yesterday yesterday;

实验结果是正确的,松了一口气~_-

做到这里,我还是想验证所有我不太清楚的点,第一,我改了类名,比如把内部类的名称改了,这里证明是不会有影响的,但是字段名是一定要一样的。第二,我又建了一个和开始一样的,只有极简的结构类,尝试如果没有 setter和getter有没有影响,结果是没影响的,toString也是可有可无的。

总之,只要保证对JSON结果的正确解构,还有分析对象,是单个类,还是一个集合类。

最后,学习的过程中,要尽量地去尝试,不断地思考,不要嫌简单,遇到问题,不要想着去依赖别人帮自己解决,问题千变万化,自己还得停下来想想。

感谢阅读,如果不妥的地方,请指出。

gson解析json字符串(代码片段)

Gson怎样使用gson把一个json字符串解析成一个jsonObject对象因此我要把上面的fastjson转换成是gson,如下图:JsonObjectobject=newJsonParser().parse(result).getAsJsonObject();怎样从gson中取出键的值使用gson把json字符串转换成一个list集合Lis... 查看详情

gson解析json字符串(代码片段)

Gson怎样使用gson把一个json字符串解析成一个jsonObject对象因此我要把上面的fastjson转换成是gson,如下图:JsonObjectobject=newJsonParser().parse(result).getAsJsonObject();怎样从gson中取出键的值使用gson把json字符串转换成一个list集合Lis... 查看详情

在android中使用GSON解析带有动态“key”和“value”的JSON

】在android中使用GSON解析带有动态“key”和“value”的JSON【英文标题】:UsingGSONtoparseaJSONwithdynamic"key"and"value"inandroid【发布时间】:2011-10-1110:03:04【问题描述】:我目前正在开发一个android项目,该项目需要我调用... 查看详情

Gson:缺少类型参数 - android应用程序中的proguard问题

】Gson:缺少类型参数-android应用程序中的proguard问题【英文标题】:Gson:Missingtypeparameter-proguardtroubleinandroidapp【发布时间】:2017-03-2516:07:35【问题描述】:我将Gson库用于序列化/反序列化对象,当我在禁用proguard的调试模式下构建... 查看详情

android中使用gson解析json数据的两种方法

Json是一种类似于XML的通用数据交换格式,具有比XML更高的传输效率;本文将介绍两种方法解析JSON数据,需要的朋友可以参考下 Json是一种类似于XML的通用数据交换格式,具有比XML更高的传输效率.从结构上看,所有的数据(data)... 查看详情

如何在 android 中解析来自 url 或 restful 服务的大量 JSON 数据?没有 GSON

】如何在android中解析来自url或restful服务的大量JSON数据?没有GSON【英文标题】:howtoparsehugeJSONdatafromaurlorrestfulserviceinandroid?withoutGSON【发布时间】:2013-12-1110:08:13【问题描述】:我有一个Restful服务,..我得到一个JSON数据,比如,... 查看详情

使用gson结合泛型解析数据

参考技术A使用Gson结合泛型解析数据时,用到了这么一个方法parameterizedType.getActualTypeArguments()[0]那么它是什么意思呢?getClass().getGenericSuperclass()返回表示此Class所表示的实体(类、接口、基本类型或void)的直接超类的Type,然后将... 查看详情

android解析json-gson使用(代码片段)

...9;com.google.code.gson:gson:2.8.6'二、基础用法1、创建实体类Android前端需要创建一个实体类,与后端传递过来的jso 查看详情

使用 gson 解析成 POJO 时,Json 总是返回 null

...kson服务器,可以将Service对象解析为JSON,然后将其发送到Android。在Android中,我有相同的Service类,但gson总是返回一个空对象。服务类:publicclassS 查看详情

android怎样将一组json数据的keyvalue对应的放入到listview中显示两列

首先使用了okhttp3获取到返回的json数据,然后通过gson解析成一个对象,开始的时候将对象放入list但是在自定义的adapter出现问题,后来放入map中但最终只显示出一组key-value数据,而且打印之后发现所有数据对是无序的,新手,请... 查看详情

如何使用 gson 解析 json?

】如何使用gson解析json?【英文标题】:Howtoparsejsonusinggson?【发布时间】:2017-06-1016:37:12【问题描述】:我怎样才能得到时间或文字这个jsonhttp://www.mocky.io/v2/58889af52600007c1d966456有人可以帮助我吗???【问题讨论】:如果你足够... 查看详情

android安卓gson解析带二级跳转

android使用gson解析嵌套复杂的json数据,数据怎么显示到布局上,布局怎么写1.创建工程2.联网的类3。布局写listview,然后通过findviewbyid在代码中找到布局的控件4.写一个解析类1.在浏览器当中打开网址2.把网址的json数据格式化,分... 查看详情

mybatis怎样判断list是不是为空

...是否为空,否则会报错。二、mybatis$与#的区别简单来说#解析的是占位符?可以防止SQL注入,比如打印出来的语句select* fromtablewhereid=?然而$则是不能防止SQL注入打印出来的语句select* fromtablewhereid=2 实实在在的参数。最简单... 查看详情

实例:gson解析泛型对象(代码片段)

一,前期基础知识储备1)Java泛型Java泛型(generics)是JDK5中引入的一个新特性,泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所... 查看详情

android:gson通过借助typetoken获取泛型参数的类型的方法

最近在使用Google的Gson包进行Json和Java对象之间的转化,对于包含泛型的类的序列化和反序列化Gson也提供了很好的支持,感觉有点意思,就花时间研究了一下。由于Java泛型的实现机制,使用了泛型的代码在运行期... 查看详情

android中是怎样防止sql注入的?

在JavaWeb中有PreparedStatement可以防止SQL注入,但是在android中有没有类似的功能呢?现在要做一个查找的功能,将本地SQLite数据库中的带有%的字段查找出来,如果我使用字段like"%"会直接将所有的结果都打印出来了,这是不... 查看详情

我怎样才能得到 Gson 的解析?我尝试这样做,但我得到了一个 Expected BEGIN_ARRAY 但是是 BEGIN_OBJECT

】我怎样才能得到Gson的解析?我尝试这样做,但我得到了一个ExpectedBEGIN_ARRAY但是是BEGIN_OBJECT【英文标题】:HowcanigetaparsewithGson?ItrytodoitbutigetanExpectedBEGIN_ARRAYbutwasBEGIN_OBJECT【发布时间】:2021-06-2518:46:42【问题描述】:这是我的Main... 查看详情

一起talkandroid吧(第三百五十三回:gson库解析json数组一)(代码片段)

各位看官们,大家好,上一回中咱们说的是Android中Gson库解析JSON对象的例子,这一回中咱们介绍的例子是Gson库解析JSON数组。闲话休提,言归正转。让我们一起TalkAndroid吧!使用步骤看官们,在本章回中我们将介... 查看详情