JSONObject toJSONString错误的解决
作者:陌下微尘 发布时间:2021-09-14 07:17:32
标签:JSONObject,toJSONString,错误
JSONObject toJSONString错误
1.com.alibaba.fastjson.JSONObject 继承了JSON
可以使用其2个重要的方法:
Model model = new Model();
String json = JSONObject.toJSONString(model); // serializes model to Json
Model model2 = JSONObject.parseObject(json, Model.class); // deserializes json into model2
即可以将json字符串转为json对象,如果该json对象的内容是可预期的对象类型,那么可以通过Model model2 = JSONObject.parseObject(json, Model.class); 取得预期的对象;
如果是不可预期的json字符串时,但有固定的key,则可通过JSONObject jsonObject = JSONObject.parseObject(jsonStr);
然后通过 jsonObject.getString("key");等基本方法获取key对于的value.
2.在使用时需要注意的地方
并非所有的对象,都能通过JSONObject.toJSONString(model) 转换成功。
例如:在接入阿里语音验证码时,对SingleCallByTtsRequest请求对象使用以上方法时,就会转换报错。
SingleCallByTtsRequest extends RpcAcsRequest<SingleCallByTtsResponse>?
RpcAcsRequest<T extends AcsResponse> extends AcsRequest<T>?
SingleCallByTtsResponse extends AcsResponse
他们的继承关系如上,这里并未对错误原因进行深入分析,猜测是因为其中有相互引用导致解析转换失败。
3.默认过滤掉值为null的key
public static String toJSONString(Object object)
该方法将实体对象转换成Json字符串时默认忽略值为null的属性。
public static String toJSONString(Object object, SerializerFeature… features)
该方法将实体对象转换成Json字符串时,如果不传递参数SerializerFeature.WriteMapNullValue,则忽略值为null的属性。
JSONUtils.toJSONString的一个坑
JSONUtils.toJSONString(null); //返回一个为"null"的字符串
这样会导致一个结果就是StringUtils.isBlank判断后,会为false
因为高德返回的这个数据结构是个key-value结构,除了null,就是一个带有”{}“的一个字符串。
不需要判断使用StringUtils.isBlank进行判断
public class JSONUtils {
? ? public static String toJSONString(Object o) {
? ? ? ? JSONWriter writer = new JSONWriter();
? ? ? ? writer.writeObject(o);
? ? ? ? return writer.toString();
? ? }
? ??
? ? public static Object parse(String text) {
? ? ? ? JSONParser parser = new JSONParser(text);
? ? ? ? return parser.parse();
? ? }
}
? ? public void writeNull() {
? ? ? ? write("null");
? ? }
? ??
? ? @SuppressWarnings({ "unchecked", "rawtypes" })
? ? public void writeObject(Object o) {
? ? ? ? if (o == null) {
? ? ? ? ? ? writeNull();
? ? ? ? ? ? return;
? ? ? ? }
来源:https://blog.csdn.net/qq_33045443/article/details/90059429


猜你喜欢
- 本文实例讲述了C#操作CSV文件类。分享给大家供大家参考。具体分析如下:这个C#类用于转换DataTable为CSV文件、CSV文件转换成D
- 一、项目简述本系统功能包括: 一款基于Springboot+Vue的电商项目,前后端分离项目,前台后台都有,前台商品展示购买,购物车分类,订
- 0.导入命名空间:using Microsoft.Office.Core;using Microsoft.Office.Interop.Ex
- 在实际项目中,Java有时候需要调用C写出来的东西,除了JNI以外,我认为一种比较好的方法是JAVA调用Shell。先把C写出来的make成
- 前言:在本文中,我们将详细讨论Java中的一个核心概念——线程的生命周期。我们将使用一个快速的图解,
- Android 2.3.7.r1 按menu键时会停止录像。改成录像时按menu键不做处理,可做如下修改: 在packages/apps/C
- 今天谈一下C#(WinForm)如何发送带附件的电子邮件!废话少说,先截图伺候:首先C#发送邮件需要smtp服务的支持,我也不知道是不是C#
- 本文为大家分享了Android Studio下载和配置教程,供大家参考,具体内容如下1.下载Android Studio官网下载
- Android ScrollView无法填充满屏幕的解决办法ScrollView滚动视图是指当拥有很多内容、屏幕显示不完时、需要通过滚动跳来
- 什么是线程池线程池(thread pool)是一种线程使用模式。线程过多或者频繁创建和销毁线程会带来调度开销,进而影响缓存局部性和整体性能。
- 一,程序执行慢导致的原因就是查询数据库慢.,导致返回值慢,那这个要怎么解决呢?1,优化数据库查询如这个文章 C#导出数据到excel如何提升
- 要说在 Spring Boot 中注册过滤器有三种方式,你都能想到哪些呢?今天松哥就来和大家聊一聊 Spring Boot 中注册过滤器的三
- Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动。下面是我这几年做开发过程中自己用过的工具类
- ThreadLocal是什么ThreadLocal是线程Thread中属性threadLocals即ThreadLocal.ThreadLo
- 1. 背景介绍java中的数组比c语言中的数组,多了两个很重要的功能当索引越界时, 会自动抛出ArrayIndexOutOfBoundsEx
- 介绍本文介绍在Java程序中如何添加图片到excel表格,添加图片时可设置图片大小、位置、旋转、超链接、可选文本等,以及如何读取、删除exc
- java模拟实现图书检索系统 (基础版),供大家参考,具体内容如下练习实现3个简单的功能,没有优化,可以根据需求,自行添加想要实现的功能。B
- 日常工作中,不管你是写Unit Test,还是采用TDD的编程方式进行开发,都会遇到断言。而断言的风格常见的会有Assert、BDD风格,对
- javax.persistence中@Column定义字段类型在@Column中有个比较强大的配置 columnDefinition,如果有
- 本文实例讲述了C#操作ftp类。分享给大家供大家参考。具体如下:using System;using System.Collections.