文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

JSONObject toJSONString错误的解决

2024-04-02 19:55

关注

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

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

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯