分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 代码编程

FastJson遇见的问题或项目实战中优化的问题,看源码都可以解决

发布时间:2023-09-06 01:49责任编辑:郭大石关键词:暂无标签

1:感觉见鬼了一般存储JSONObject中的字段竟然不见了? 

 ???????JSONObject object=new JSONObject(); ???????Map fields = new HashMap(); ???????fields.put("1","1"); ???????object.put("fields",fields); ???????System.out.println(object.toString()); ???????JSONObject newFields = object.getJSONObject("fields"); ???????newFields.put("2",2); ???????//TODO ?序列化字符串没有2?!! ???????// 看源码便可以知晓,当我们使用Map当做JSONObject解析时候,Fastjson会返回一个新的对象 ???????System.out.println(object.toString());

  

com.alibaba.fastjson.JSON#toJSON(java.lang.Object, com.alibaba.fastjson.serializer.SerializeConfig)源码:

 public static Object toJSON(Object javaObject, SerializeConfig config) { ???????if (javaObject == null) { ???????????return null; ???????} ???????if (javaObject instanceof JSON) { ???????????return javaObject; ???????} ???????if (javaObject instanceof Map) { ???????????Map<Object, Object> map = (Map<Object, Object>) javaObject;        // 创建了一个新的JSONObject返回了 ???????????JSONObject json = new JSONObject(map.size()); ???????????for (Map.Entry<Object, Object> entry : map.entrySet()) { ???????????????Object key = entry.getKey(); ???????????????String jsonKey = TypeUtils.castToString(key); ???????????????Object jsonValue = toJSON(entry.getValue()); ???????????????json.put(jsonKey, jsonValue); ???????????} ???????????return json; ???????}

  

2:当我们使用JSONArray时候,有些时候里面可能存储较大量的数据,但是有些场景需要在指定index处进行insert操作,这时由于JSONArray默认底层使用的是ArrayList存储,因此存在性能问题,那么是否可以使用LinkedList呢?答案可以的:

 JSONArray arr = new JSONArray(new LinkedList());

  

3:当我们查询接口获取到一个JSONArray字符串想反序列化时候可否将底层存储的ArrayList使用LinkedList替换呢?答案:可以,修改一下源码或者添加一个重载方法即可。

 public static JSONArray parseArray(String text) { ???????if (text == null) { ???????????return null; ???????} ???????DefaultJSONParser parser = new DefaultJSONParser(text, ParserConfig.getGlobalInstance()); ???????JSONArray array; ???????JSONLexer lexer = parser.lexer; ???????if (lexer.token() == JSONToken.NULL) { ???????????lexer.nextToken(); ???????????array = null; ???????} else if (lexer.token() == JSONToken.EOF) { ???????????array = null; ???????} else {// ???????????array = new JSONArray(new ArrayList()); ???????????array = new JSONArray(new LinkedList()); ???????????parser.parseArray(array); ???????????parser.handleResovleTask(array); ???????} ???????parser.close(); ???????return array; ???}

  

FastJson遇见的问题或项目实战中优化的问题,看源码都可以解决

原文地址:https://www.cnblogs.com/leodaxin/p/8854951.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved