zoukankan      html  css  js  c++  java
  • gson 生成的json字符串带u003c,u003d,u003e的解决方案(gson将实体类转json)

    1.情景展示

      如上图所示,使用谷歌的Gson将实体类转json字符串,如果实体类的属性值,出现大于号、小于号、等号等符号时,调用GsonBuilder进行转换时,这些符号会被强制转换成unicode编码。

      如何解决这个问题? 

    2.原因分析

      错误方式一:使用replaceAll()

      错误方式二:使用iso-8859-1解码

    3.解决方案

      方式一:使用js解码

    // 实例化对象并赋值
    Result result = new Result().setCode("200").setFormat("PDF").setMessage("<Name>Mary=don</Name>");
    // 实体类转json字符串
    String gsonStr = new GsonBuilder().create().toJson(result);
    ScriptEngine engine = new ScriptEngineManager().getEngineByExtension("js");
    String unUrl = "";
    try {
        unUrl = (String)engine.eval("unescape('"+gsonStr+"')");
        System.out.println(unUrl);
    } catch (ScriptException e) {
        e.printStackTrace();
    }
    

      虽然这种方式可以实现解码,但不推荐使用。 

      方式二:禁用html编码(推荐使用)

    // 实例化对象并赋值
    Result result = new Result().setCode("200").setFormat("PDF").setMessage("<Name>Mary=don</Name>");
    // 实体类转json字符串(禁止编码)
    String gsonStr = new GsonBuilder().disableHtmlEscaping().create().toJson(result);
    System.out.println(gsonStr);
    

      方式三:转json对象

    // 实例化对象并赋值
    Result result = new Result().setCode("200").setFormat("PDF").setMessage("<Name>Mary=don</Name>");
    // 实体类转json字符串
    String gsonStr = new GsonBuilder().create().toJson(result);
    com.alibaba.fastjson.JSONObject aliJSON = JSONObject.parseObject(gsonStr);
    System.out.println(aliJSON);
    

      注意:必须使用阿里的json,不能使用net的json。

      netJson执行结果如下: 

    4.拓展

      使用Gson将实体类转json字符串,其实有两种方式。

      除了使用GsonBuilder外,还可以使用Gson实现

      使用这种方式,也同样存在着被乱编码的情况。

      使用GsonBuilder转json,还有一个功能就是:可以格式化json字符串。

      我们知道,在Java中,不管是json对象还是字符串,打印到控制台上的数据,始终只显示在一行上,无法进行格式化。

    // 实例化对象并赋值
    Result result = new Result().setCode("200").setFormat("PDF").setMessage("<Name>Mary=don</Name>");
    GsonBuilder gsonBuilder = new GsonBuilder();
    // 美化输出(这里是格式化的关键)
    gsonBuilder.setPrettyPrinting();
    // 实体类转json字符串(禁止编码)
    String gsonStr = gsonBuilder.disableHtmlEscaping().create().toJson(result);
    System.out.println(gsonStr);
    

     

      这样,在实际开发调试过程中,当控制台出现一大坨json字符串时,我们再也不用将其单独复制出来,再格式化进行查看啦。 

      综上所述,使用GsonBuilder比Gson功能更加强大。

      另外,使用谷歌的Gson转json字符串还有一个好处就是:不用担心当属性名称不是标准的驼峰命名法(比如上面:首字母是大写)时,转换出来的key名称和属性名称不完全一致的问题。

      2020-12-23

      当想对json字符串进行格式化时,需要先将json字符串转json对象,再用GsonBuilder进行格式化。

    写在最后

      哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

     相关推荐:

  • 相关阅读:
    Git 创建仓库并拉取代码
    Linux export 命令
    Linux ps 命令
    Linux sed 命令
    Linux find 命令
    Linux chmod 命令
    Linux chgrp 命令
    解除/配置 linux/nginx 的 tcp 连接(nginx配置文件日常配置推荐)
    更改Ubuntu的apt源
    anaconda 各版本的下载地址
  • 原文地址:https://www.cnblogs.com/Marydon20170307/p/14062839.html
Copyright © 2011-2022 走看看