Json串的字段如果和类中字段不一致,如何映射、转换?
Json串是我们现在经常会遇到的一种描述对象的字符串格式。在用Java语言开发的功能中,也经常需要做Json串与Java对象之间的转换。
![](https://img2020.cnblogs.com/blog/1410071/202011/1410071-20201117165559178-1788524916.png)
fastjson就是经常用来做Json串与Java对象之间的转换,就像下面我用fastjson实现的示例。
![](https://img2020.cnblogs.com/blog/1410071/202011/1410071-20201117165615297-1331507612.png)
可是有的情况就无法这样简单处理,比如json串的字段和类中的字段不一致时。不一致有以下这些情况。
json串的字段名与类中的字段名不一致
比如我们上面的例子中类中的字段名叫“id”,而要求json中的字段名叫“tid”。那要怎么办呢?fastjson已经替我们想到了。看我下面的示例。
![](https://img2020.cnblogs.com/blog/1410071/202011/1410071-20201117165637335-171234141.png)
和上面示例的代码的区别是在需要处理的字段上又加了一个注解,通过这个注解来告诉fastjson对应的json的字段名就可以了。执行一下,看看能不能达到想要的效果。
![](https://img2020.cnblogs.com/blog/1410071/202011/1410071-20201117165657723-437807662.png)
json串中的字段名变成了“tid”,达到了我们的预期。
类中的字段不需要转换到json串中
还有的情况是我们java类中的一些字段不希望在转换后的json串中出现,那这种情况要怎么处理呢?这个需求“@JSONField”注解照样能帮我们解决。
看示例。
![](https://img2020.cnblogs.com/blog/1410071/202011/1410071-20201117165718861-262217315.png)
“@JSONField”注解有个属性叫serialize,默认值为true,表示这个字段是会转换(序列化)到json串中。设置成false就是表示这个字段不转换到json串中。
照样执行看看结果是否达到我们的预期。
![](https://img2020.cnblogs.com/blog/1410071/202011/1410071-20201117165742952-1997270625.png)
在json串中已经没有了“id”这个字段的内容了。
Json串中的字段不希望转换到java对象中
还有的时候是Json串中有的字段在java类中有对应位置同名的字段,但是我们又不希望这个字段转换到java对象中,那又要怎么办呢?“@JSONField”注解还是能完成这个任务。
![](https://img2020.cnblogs.com/blog/1410071/202011/1410071-20201117165801099-1303952553.png)
这次使用了“@JSONField”注解的另外一个属性deserialize,大家是不是已经猜出来了这个属性的含义呢。
这个属性值一样默认为true,表示从json串转换(反序列化)为java对象时转换这个字段。那我们不需要转换这个字段就设置false就可以了。
一起来看看执行结果,是不是达到了我们的要求。
![](https://img2020.cnblogs.com/blog/1410071/202011/1410071-20201117165812823-493521350.png)
恩,json中的id没有转换到对象中。
这个“@JSONField”还有很多其他的属性,大家有兴趣可以自己研究,或者评论区一起讨论讨论。
今天的内容就到这里了。