FastJson遇见的问题或项目实战中优化的问题,看源码都可以解决
Posted 进无止境
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FastJson遇见的问题或项目实战中优化的问题,看源码都可以解决相关的知识,希望对你有一定的参考价值。
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遇见的问题或项目实战中优化的问题,看源码都可以解决的主要内容,如果未能解决你的问题,请参考以下文章
Spark 实战系列Spark 使用 BulkLoad 同步数据到 hbase 排序优化
Spark 实战系列Spark 使用 BulkLoad 同步数据到 hbase 排序优化