起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 4846|回复: 0

[分享] JSONString转JavaBean过程中碰到的坑,爬坑小结

[复制链接]

851

主题

2560

帖子

5714

积分

论坛元老

Rank: 8Rank: 8

积分
5714
QQ
发表于 2021-4-10 19:37:29 | 显示全部楼层 |阅读模式
从接口获取了String类型的JSON格式的字符串,里面有一个物品信息相关的数组。希望把JSON转换成List<Bean>。
为此创建了一个Bean。包含了所有的物品信息列。
通过 JSONArray.parseArray(temp.getString("RecList"), BagInfoBean.class) 方法,把JSONString转换成List<Bean>。运行不报错,但就是bean.getName()取到的值为空。查了JSON字符串,没有问题,查了方法也没有问题。一顿百度,发现自己的方法跟网上查到的是一样的,除了字段名不一样,其它的没有区别。实在没招了,就把别人的代码copy出来,跑人家的案例。结果正常。
实在是无语了。在我的bean里增加两个新列(与案例中的一样)。在jsonString串中增加两列的信息。可以正常获取值。而我原来创建的那些bean属性就拿不到值。。。。。
JSONString串内容如下:
  1. [{"bAudit":false,"cCNo":"0000020210404004","cDes":"中国"}]
复制代码
  1. // bean类中,代码片段
复制代码
注意看代码中的注释,取不到值的原因写在注意里了。就是因为大小写的问题。
下面是正确代码
  1. // 属于名称如果为小写,通过代码自动生成工具,生成get  set 方法时,变量 名的首字母会自动变成大写。如果json串中的key 也是小写,就没有问题。
复制代码
下面为问题代码
  1. // 如果属性名称为下面这样的, get set 方法自动生成代码的时候首字母不会变成大写。这时采用<span style="background-color: rgb(255, 255, 255);">JSONArray.parseArray</span> 方法把json串转成beanList时,就会有问题。属性不会被  // 赋值的。 因此,需要采用注解,告诉set方法,json串中的key是什么 。@JSONField(name = "nAme")  这是案例。json串中的key 是【nAme】。注解一定要写在set方法上面  
复制代码



总结:JSONString字符串中的key 与 bean中的属性名称,必须一致,除了首字母。这里的逻辑有点绕,大家注意分析。如果json串中的key全部为小字或大写,bean属性也应该全部为小写或大写;如果json串中key的首字母为小字,后面为大写,并且bean中的属性 与json串中的key保持一致时。**重点:set方法前面必须加入注解,指明key的标准值。或者还有另一种方法,就是手动写set方法,把首字母变成大写。

如果我写的逻辑没看明白,就自己验证一下,找找感觉吧!!

逆向思维:如果需要把bean转成jsonString,则需要给get方法加注解。逻辑与set方法相同。
注解还可以指定,生成的字符串中,各个key的顺序。自己百度吧,很容易找到正解。

企业应用定制开发。X5开发者。
手机:15065117236
QQ:87356667
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-11-24 09:17 , Processed in 0.077430 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表