Jackson Gson Json.simple 比较
为公司做了小任务,需要用到Java Json库,Json库我几个月之前就用过,不过那时候是跟着项目来的,延续了项目的使用习惯直接用了jackson Json,而这次我觉得好好比较一下几个常见的Json库,然后选一个最快的。
看了几篇blog,觉得其实可选的就三种,jackson, gson, json.simple。我最初用了json.simple,然后写出来了这样的函数
从URL中读取Json数据,并且在Request中添加身份信息
public static JSONObject readJsonFromUrl(String url, String token) {
try {
URLConnection conn = new URL(url).openConnection();
conn.setRequestProperty("Authorization", "Bearer " + token);
InputStream response = conn.getInputStream();
String JsonStr = IOUtils.toString(response);
JSONObject jsonObj = (JSONObject)JSONValue.parseWithException(JsonStr);
// System.out.println(jsonObj);
return jsonObj;
}catch (Exception e) {
e.printStackTrace();
}
return null;
}
然后,抽取Json中的数据
public static Reply parseJson(JSONObject jsonObj) {
Reply reply = new Reply(jsonObj.get("next_stream_position").toString());
JSONArray jsonAry = (JSONArray)(jsonObj.get("entries"));
for(int i = 0; i < jsonAry.size(); i ++) {
JSONObject iObj = (JSONObject)jsonAry.get(i);
reply.addIPAddr(iObj.get("ip_address").toString());
}
return reply;
}
写完之后,我觉得有必要将Json替换成更加高效的实现,于是我打算从Jackson, Gson中挑一种使用
Jackson适合处理大量的数据,Gson适合处理小些的数据,并且Gson的jar包比其他选择小了很多,给我一种很轻巧的感觉。
此外,我很不情愿为Json数据写一个POJO,因为我只要这个POJO中的一两个成员变量。Jackson不仅要这个POJO,还需要在这个POJO上加上annotation,所以我直接把它排除了。
Gson,google的产品,给我一种可以信赖的感觉。于是我写出了这样的代码
public static Reply readJsonFromUrl(String url, String token) {
Reply reply = new Reply();
try {
URLConnection conn = new URL(url).openConnection();
conn.setRequestProperty("Authorization", "Bearer " + token);
InputStream response = conn.getInputStream();
JsonReader reader = new JsonReader(new InputStreamReader(response, "UTF-8"));
// only one element will be returned
// parse data recursively
// google's way to handle streaming data, ugly though
reader.beginObject();
reader.beginObject();
while(reader.hasNext()) {
String name = reader.nextName();
if(name.equals("next_stream_position"))
reply.stream_position = reader.nextString();
else if(name.equals("entries")) {
reader.beginArray();
while(reader.hasNext()) {
reader.beginObject();
while(reader.hasNext()) {
name = reader.nextName();
if(name.equals("ip_address"))
reply.addIPAddr(reader.nextString());
else if(name.equals("created_at"))
reply.lastDate = reader.nextString();
else
reader.skipValue();
}
reader.endObject();
}
reader.endArray();
} else
reader.skipValue();
}
reader.endObject();
reader.close();
return reply;
}catch (Exception e) {
e.printStackTrace();
}
return null;
}
由于需要处理流式数据且不愿意写POJO,最终就写成了上面这一坨丑陋不堪的代码,我想这下效率倒是可以保证了。
写完代码后我想了下,觉得最合适的Json库应该还是Json.simple,它的转换简单,可以直接根据String get到想要的那一个信息,且最重要的是代码写的短,实现的效率高。在企业,在学校,在面临交差的任何地方,用最短的时间完成任务才是最重要的,这一点我已深有体会。
Well,以后默认用Json.simple
Jackson Gson Json.simple 比较的更多相关文章
- Jackson Gson Json.simple part 2
这篇blog介绍 Jackson 的特点和使用方法 Jackson支持三种使用方法 流API(streaming api Incremental parsing/generation) JsonPar ...
- JSON库之性能比较:JSON.simple VS GSON VS Jackson VS JSONP
从http://www.open-open.com/lib/view/open1434377191317.html 转载 Java中哪个JSON库的解析速度是最快的? JSON已经成为当前服务器与WE ...
- 开源 JSON 库解析性能对比( Jackson / Json.simple / Gson )
Json 已成为当前服务器与 web 应用之间数据传输的公认标准. 微服务及分布式架构经常会使用 Json 来传输此类文件,因为这已经是 webAPI 的事实标准. 不过正如许多我们习以为常的事情一样 ...
- Json学习总结(2)——Java 下的 JSON库性能比较:JSON.simple vs. GSON vs. Jackson vs. JSONP
JSON已经成为当前服务器与WEB应用之间数据传输的公认标准,不过正如许多我们所习以为常的事情一样,你会觉得这是理所当然的便不再深入思考了.我们很少会去想用到的这些JSON库到底有什么不同,但事实上它 ...
- Java 下的 JSON库性能比较:JSON.simple
JSON已经成为当前服务器与WEB应用之间数据传输的公认标准,不过正如许多我们所习以为常的事情一样,你会觉得这是理所当然的便不再深入思考了.我们很少会去想用到的这些JSON库到底有什么不同,但事实上它 ...
- json解析jackson ,Gson,等知识总结
相关资料链接: Java构造和解析json数据的两种方法详解 java解析json Android网络之数据分析---使用Google Gson 解析Json数据 使用jackson在java中处理j ...
- Java下利用Jackson进行JSON解析和序列化
Java下利用Jackson进行JSON解析和序列化 Java下常见的Json类库有Gson.JSON-lib和Jackson等,Jackson相对来说比较高效,在项目中主要使用Jackson进行 ...
- 【转载】Java下利用Jackson进行JSON解析和序列化
参考资料: https://blog.csdn.net/sdut406/article/details/85647982 Java下常见的Json类库有Gson.JSON-lib和Jackson等,J ...
- Java下用Jackson进行JSON序列化和反序列化(转)
Java下常见的Json类库有Gson.JSON-lib和Jackson等,Jackson相对来说比较高效,在项目中主要使用Jackson进行JSON和Java对象转换,下面给出一些Jackson的J ...
随机推荐
- DFS-深度优先遍历
#include <iostream> /* 5 4 0 0 1 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 0 0 4 1 Total: 9 7 5 Min: 5 ...
- 9、Qt 事件处理机制
原文地址:http://mobile.51cto.com/symbian-272812.htm 在Qt中,事件被封装成一个个对象,所有的事件均继承自抽象类QEvent. 接下来依次谈谈Qt中有谁来产生 ...
- Oracle 11g 数据库 shutdown 后立即执行 startup mount 报错的解决办法
最新文章:Virson's Blog 今天在配置Goldengate时Capture进程提示未开启归档日志,然后立即用sys用户登录orcl数据库,然后执行了“shutdown immediate”命 ...
- 关于Unity中的光照(七)
全局光照 GI 这里所说的反射就是,一个红色的物体,当太阳照射它的时候,它周围的物体也会变得有点红. 1:Realtime每帧都会计算光照,实时光照是不会反射的,所以它的光影显得单调;2:Baked ...
- Airtest 网易 UI 自动化工具 Airtest 浅用记录
一 使用目的 该工具主要是面向游戏UI测试基于图像识别,如游戏框架unity,Cocos-js以及网易内部的游戏框架同时也支持原生Android App 的基于元素识别的UI自动化测试.本文主要使用目 ...
- Git 初始化项目、创建合并分支、回滚等常用方法总结
就在刚才查看资料时候, 看见一句话, 写的特别好: 当我的才华撑不起我的梦想的时候, 应该安静下来学习 配上我最喜欢动漫的一个角色: 红莲 1. Git 初始化项目 1). 创建新的知识库 echo ...
- Android WiFi 扫描流程分析(wpa_supplicant)
void wpa_supplicant_req_scan(struct wpa_supplicant *wpa_s, int sec, int usec) { int res; if (wpa_s-& ...
- MFC绘图小实验(3)
1,使用默认的文本背景模式,在点(-200,20)处输出黄底红字“Computer Graphics Based on VC++”;在(50,20)处输出黄底红字“BoChuang Research ...
- C# js 在页面能执行,放在单独js文件不能执行
我们先来看看MVC中生成的 注意:url.Content 生成的路径 Html.ActionLink 与 Url.Action 1.两者者是根据给定的Controller,Action 生成链接, 但 ...
- LVS 实现负载均衡原理及安装配置详解
负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群.常用的负载均衡开源软件有nginx.lvs.haproxy,商业的硬件负载均衡设备F5.Netscale.这里主要是学 ...