JSONObject toJSONString错误的解决

目录
  • JSONObject toJSONString错误
    • 1.com.alibaba.fastjson.JSONObject 继承了JSON
    • 2.在使用时需要注意的地方
    • 3.默认过滤掉值为null的key
  • JSONUtils.toJSONString的一个坑
    • 不需要判断使用StringUtils.isBlank进行判断

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;
        }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • JSON.toJSONString()空字段不忽略修改的问题

    目录 JSON.toJSONString()空字段不忽略修改 JSON.toJSONString()丢失/少字段 问题描述 原因 JSON.toJSONString()空字段不忽略修改 使用JSON.toJSONString(object)方法,返回的json中,默认会将为空的字段自动忽略. public static void main(String[] args) {     DossierApply dossierApply = new DossierApply();     String

  • JSON.parseObject和JSON.toJSONString实例详解

    JSON.parseObject,是将Json字符串转化为相应的对象:JSON.toJSONString则是将对象转化为Json字符串.在前后台的传输过程中,Json字符串是相当常用的,这里就不多介绍其功能了,直接举一下应用的小例子,帮助理解这两个方法的用法. 首先用maven引入fastjson <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apa

  • 解决JSONObject.toJSONString()输出null的问题

    目录 JSONObject.toJSONString()输出null 代码 输出 看下SerializerFeature属性 不要盲目的使用JSONObject.toJSONString JSONObject.toJSONString()输出null 问题:fastjson的api种,jsonObject.toJsonString(),当值为null时,没打印出来 代码 JSONObject jsonObject = new JSONObject(); jsonObject.put("id&qu

  • 解决JSON.toJSONString首字母大小写的问题

    目录 JSON.toJSONString首字母大小写 问题场景 如何解决 JSONObject.toJSONString把属性的大小写改变了 JSON.toJSONString首字母大小写 问题场景 最近在做医院项目,医院方面his部分的入参出参由mirth去封装了,写了一版接口文档给了我. 我一看就有点闹心,首字母全是大写.和我上一家待过的项目里的类名字段名全是大写的闹心程度差不多… 因为我需要用http请求去调他的接口,传参只能用String,所以需要用到JSON工具去转成String. 但

  • 使用JSON.toJSONString()返回{}的原因

    目录 JSON.toJSONString()返回{}原因 测试代码 原因 JSON.toJSONString的坑有些字段没有了 1.问题 2.解决方式 3.原因 JSON.toJSONString()返回{}原因 测试代码 public static void main(String[] args) {undefined ResultModel resultModel = ResultModel.error("110","error"); System.out.pr

  • JSONObject toJSONString错误的解决

    目录 JSONObject toJSONString错误 1.com.alibaba.fastjson.JSONObject 继承了JSON 2.在使用时需要注意的地方 3.默认过滤掉值为null的key JSONUtils.toJSONString的一个坑 不需要判断使用StringUtils.isBlank进行判断 JSONObject toJSONString错误 1.com.alibaba.fastjson.JSONObject 继承了JSON 可以使用其2个重要的方法: Model m

  • Oracle数据库中ora-12899错误的解决方法

    在使用ORACLE的过程中,会出现各种各样的问题,各种各样的错误,其中ORA-12899就是前段时间我在将数据导入到我本地机器上的时候一直出现的问题.不过还好已经解决了这个问题,现在分享一下,解决方案; 出现ORA-12899,是字符集引起的,中文在UTF-8中占3个字节,ZHS16GBK中占2个字节,而源dmp文件字符集是ZHS16GBK库里倒出来的数据,现在要导入到目标字符集为UTF-8的库里,所以会出现ORA-12899 其实只要修改一下ORACLE 的字符集就可以很好的解决这个问题; 但

  • Oracle数据库TNS常见错误的解决方法汇总

    TNS是Oracle Net的一部分,是专门用来管理和配置Oracle数据库和客户端连接的一个工具,在大多数情况下客户端和数据库要通讯,就必须配置TNS.本文主要讲述了Oracle数据库TNS常见错误的解决方法如下: 1.ORA-12541:TNS:没有监听器 原因:没有启动监听器或者监听器损坏.若是前者,使用命令net start OracleOraHome10gTNSListener(名字可能有出入)即可;如果是后者,则使用"Net Configuration Assistant"

  • Oracle数据库ORA 54013错误的解决办法

    ORA-54013: 不允许对虚拟列执行 INSERT 操作 这是Oracle 11 的新特性 -- 虚拟列. 在以前的Oracle 版本,当我们需要使用表达式或者一些计算公式时,我们会创建数据库视图,如果我们需要在这个视图上使用索引,我们会创建基于函数的索引.现在Oracle 11允许我们直接在表上使用虚拟列来存储表达式.虚拟列的值是不存储在磁盘的,它们是在查询时根据定义的表达式临时计算的.我们不能往虚拟列中插入数据,我们也不能隐式的添加数据到虚拟列,我们只能使用物理列来插入数据.然后可以查询

  • mysql免安装版1067错误终极解决办法图文教程

    [从笔记本到pc] 笔记本一直都使用MySQL免安装版5.6.17,使用如下方法安装: 今天把同一个zip包传到pc上,按上面的方法安装居然报1067,按上面方法多次尝试还是不行. 百度,google查半天还是不行,最终折腾到一个好办法,应该可以一劳永逸的解决这个问题. [windows事件查看] 我的电脑--此电脑--右键管理--计算机管理--系统工具--事件查看器--Windows日志--应用程序--找错误标志,如下图 发现提示3306被占用 [杀掉占用程序] 通过netstat -ano查

  • 解决SQL SERVER数据库备份时出现“操作系统错误5(拒绝访问)。BACKUP DATABASE 正在异常终止。”错误的解决办法

    SQL SERVER数据库进行备份时出现"操作系统错误5(拒绝访问).BACKUP DATABASE 正在异常终止."错误.我们应该如何解决这个问题?小编今天为大家推荐一个解决办法. 一般备份文件选择的目录为磁盘根目录或备份所选分区未授予sqlserver用户读写权限时会出现此错误. 解决办法就是给sqlserver用户授予权限: 选择要备份的文件夹 ,右键-->属性-->安全-->看下"组或用户"是否包涵Authenticated Users 这

  • WordPress导入数据库出现”Unknown collation: ‘utf8mb4_unicode_ci”错误的解决办法

    从WordPress4.2版本开始,如果我们在MYSQL5.1版本数据中导出的数据编码是带有utf8mb4格式的,如果我们搬迁网站复原数据的时候,MYSQL5.5等高版本数据库导入到MYSQL5.1低版本的时候会出现"Unknown collation: 'utf8mb4_unicode_ci"错误问题,以前是没有这个问题的,从WP4.2开始才有的. 要解决这个问题,如果我们使用的VPS/服务器,可以类似老左昨天的"Linux CentOS6环境下MySQL5.1升级至MyS

  • 在Ubuntu 16.10安装mysql workbench报未安装软件包 libpng12-0错误的解决方法

    1.安装mysql workbench,提示未安装软件包 libpng12-0 下载了MySQL Workbench 6.3.8 在安装的时候报错: sudo dpkg -i mysql-workbench-community-6.3.8-1ubu1604-amd64.deb 提示:未安装软件包 libpng12-0. 然而使用sudo apt-get -f install后还是报错,后来找到下载libpng12-0的地址并安装. 2.下载安装libpng12-0 下载libpng12-0地址:

  • myeclipse中使用maven前常见错误及解决办法

    1.jdk与jre (错误:java.lang.UnsupportedClassVersionError: Unsupported major.minor version 51.0) windows-preferences-java-Installed JREs Add适用的jre windows-preferences-java-compiler Compiler compliance level:改为与上一致版本 项目右键-properties-java compiler Compiler

随机推荐