Android Gson Json的反序列化一些细节

本文探讨了在Android中使用Gson库进行Json反序列化的细节,包括fromJson方法的基本用法,处理{}和[]类型的Json数据。在处理嵌套Json对象时遇到的问题,如预期的String实际为BEGIN_OBJECT错误,以及解决办法。还提到了@SerializedName注解在字段映射中的作用,以及在调试过程中遇到的字段识别问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是我使用的Json数据,这里乱码没有关系,这是编码问题,Android模拟器可以识别

使用Gson的fromJson基本用法 gson.fromJson(String str,类.class) 对应 {} JSONObject 键值对(Key-value)集合  最好不要有 {key:{}}这种类型

或者 gson.fromJson(String str,new TypeToken<List<类>>(){}.getType()); 对应 [{},{}] JSONArray Json的数组

我尝试先读出yesterday对应的值和forecast对应的值,在按照类使用fromJson来读取

所以我先定义了一个类包含date,high等等 

另一个类包含yesterday,city,forecast等等来读取

但是定义yesterday 类型为String 会报错Expected String but was BEGIN_OBJECT at line 1 column 2 path .$yesterday

后来我定义了JSONObject,不会报错了,但是无法读取,地址为空

 

定义类里套类我没实验过,不知道

我就结合JSONObject jsonData = jsonObject.getJSONObject(str);  和fromJson一起使用

是可以的

 

注意到yesterday里的风向和风力 与 forecast里的风力和风向 命名不同

可以使用@SerializedName

@SerializedName("fx")
private String fengxiang;

只会fx的被识取,二fengxiang未识取,为null 我在debug时字符串中确定有fengxiang,但无法识别,不知道为什么

@SerializedName(value = "fengxiang", alternate = {"fx"})
private String fengxiang;

这样就可以了

@SerializedName(value = "fengxiang", alternate = {"fx","fengxiang"})
private String fengxiang;

编译器会报错

本人菜鸟,如有不对,敬请指出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值