|
从接口获取了String类型的JSON格式的字符串,里面有一个物品信息相关的数组。希望把JSON转换成List<Bean>。
为此创建了一个Bean。包含了所有的物品信息列。
通过 JSONArray.parseArray(temp.getString("RecList"), BagInfoBean.class) 方法,把JSONString转换成List<Bean>。运行不报错,但就是bean.getName()取到的值为空。查了JSON字符串,没有问题,查了方法也没有问题。一顿百度,发现自己的方法跟网上查到的是一样的,除了字段名不一样,其它的没有区别。实在没招了,就把别人的代码copy出来,跑人家的案例。结果正常。
实在是无语了。在我的bean里增加两个新列(与案例中的一样)。在jsonString串中增加两列的信息。可以正常获取值。而我原来创建的那些bean属性就拿不到值。。。。。
JSONString串内容如下:
- [{"bAudit":false,"cCNo":"0000020210404004","cDes":"中国"}]
复制代码 注意看代码中的注释,取不到值的原因写在注意里了。就是因为大小写的问题。
下面是正确代码
- // 属于名称如果为小写,通过代码自动生成工具,生成get set 方法时,变量 名的首字母会自动变成大写。如果json串中的key 也是小写,就没有问题。
复制代码 下面为问题代码
- // 如果属性名称为下面这样的, 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的顺序。自己百度吧,很容易找到正解。
|
|