房地产,汽车,知识产权,医疗器械自动化产线,机器人自动化等设备,互联网广告或其他,什么销售好做容易赚大钱?

温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_',
blogTitle:'使用Jackson来实现Java对象与JSON的相互转换的教程',
blogAbstract:'一、入门Jackson中有个ObjectMapper类很是实用,用于Java对象与JSON的互换。1.JAVA对象转JSON[JSON序列化]import java.io.IOE import java.text.ParseE import java.text.SimpleDateF & import com.fasterxml.jackson.databind.ObjectM & public class JacksonDemo { & public static void main(String[] args) throws ParseException, IOException { &&& User user = new User(); ',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:7,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:true,
hostIntro:'',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}主题信息(必填)
主题描述(最多限制在50个字符)
申请人信息(必填)
申请信息已提交审核,请注意查收邮件,我们会尽快给您反馈。
如有疑问,请联系
Web学习中...
故不积跬步,无以至千里;不积小流,无以成江海。骐骥一跃,不能十步;驽马十驾,功在不舍。锲而舍之,朽木不折;锲而不舍,金石可镂。
屌丝 Java 开发工程师json工具性能比较:json-lib和jackson进行Java对象到json字符串序列化 - hjg1988 - ITeye技术网站
博客分类:
&&& 网上查找“java json”,发现大家使用最多的还是json-lib来进行java对象的序列化成json对象和反序列化成java对象的操作。但是之前在网上也看到过一往篇关于json序列化性能比较的文章,不过一下子找不到了,所以没有引用。另外公司同事也做过类似的测试,结果都表明,json-lib的性能不太令人满意,而一个叫jackson的json序列化工具却表现不俗,另外,json-lib对null值的处理让人也感觉比较困惑。
&&& 这里,我也对这两个java json工具进行了一次粗略的测试,主要测试从java对象序列化成json字符串的性能。按以下三种方式进行:
使用jackson,并在每次循环中重用ObjectMapper对象(jackson with cache)
使用jackson,并在每次循环中重新生成ObjectMapper对象(jackson without cache)
使用json-lib
直接使用StringBuffer进行字符串拼接
&&& 因为见过有人在使用jackson时,每次都new 一个ObjectMapper的情况,而在官方教程中看到过这样一段话(can reuse, share globally):
ObjectMapper mapper = new ObjectMapper(); // can reuse, share globally
User user = mapper.readValue(new File("user.json"), User.class);
即ObjectMapper可以重用,所以这里同时进行重用和不重用方式的测试,另外还测试直接使用StringBuffer拼接字符串的方式,以比较json序列化与原始的java方法的性能差异。
&&& 这里以不断增加并发线程数,每个线程循环进行1000次序列化,每次进行100次测量,结果取一个线程跑完(即序列化完1000次)的时间平均值的方式测试在多线程并发情况下的性能。
测量次数 = 100
每个线程循环进行序列化次数 = 1000
平均时间为一个线程跑完时间 = 总时间/测量次数/线程数
&&& 测试的java对象包含了基本类型属性和复杂属性,并且对象具有继承关系。
&&& 注:内存使用情况的数据据仅供参考,这个结果并不准确,因为受机器影响比较大,每次测试差异也比较大,不能准确说明问题,但还是可以参考一下。
从上面的两个时间性能的图中可以看出,无论是在低并发还是高并发的情况下,时间性能上,jackson使用重用ObjectMapper方式大大优于使用json-lib方式,甚于jackson使用非重用ObjectMapper方式也略优于json-lib方式。另外也可以看出,jackson在重用ObjectMapper的方式下,性能几乎接近于直接使用StringBuffer的append方法拼接了,尤其在高并发的情况下,两者的曲线几乎要重合了。从这里可以看出jackson的性能非常出色。
另外,从两个空间性能的图中得出的结论与时间性能基本相同,但是由于内存的使用量波动较大,每次测量的结果也相差比较大,并不十分准确,但还是可以看出个大概。
此外,还发现一个现象,在低线程数的情况下,只开一个线程的时间性能要比同时开多个线程的时间性能差不少,具体原因还有待分析,不知道是否与双核CPU有关。
&&& 另外附上测试代码,其中使用了一个同事写的测试工具,叫nanobench.jar的jar包(这个工具会在每次测试前每做一次“预热”,以排除干扰,因为java虚拟机刚开始运行时会比较慢。并在测试前会做机器资源清理工作,以减小每次测试受上次测试的影响,参考源码:)。
下载次数: 4189
浏览 16990
论坛回复 /
(29 / 41170)
quaff 写道dieslrae 写道google的gson建议去测试一下
gson比jackson慢一个数量级,而且gson是对field序列化,不符合java bean惯例对getter序列化.
基于field的侵入性更小,有些东西并全是pojo,比如pojo有一些方法getXXX(),返回的却是属性的计算结果,jackson就很麻烦了。
gson慢有慢的道理,毕竟是基于field的,要重复反射,不像基于method的可以缓存Method。
另外有多少应用在意这快的0.xxx毫秒哪?!对现有系统影响小,api简单才是关键。
一次调用0.xxx毫秒确实不会在意,但是如果你的是接口服务,并且并发量很大的话,就会出现性能瓶颈。
很多接口服务是以json形式暴露,有些接口服务对性能要求还是比较高的。我在公司做过一个项目就是先后用了这两种工具,这个项目并发量很大。用jackson是一方面是因为性能问题,另一方面是因为json-lib的api太不好友好了,并且因为用了一些json-lib自己的对象,程序出现过一些莫名奇妙的错误,而jackson的要易用多了,api也简单。
dieslrae 写道google的gson建议去测试一下
gson比jackson慢一个数量级,而且gson是对field序列化,不符合java bean惯例对getter序列化.
基于field的侵入性更小,有些东西并全是pojo,比如pojo有一些方法getXXX(),返回的却是属性的计算结果,jackson就很麻烦了。
gson慢有慢的道理,毕竟是基于field的,要重复反射,不像基于method的可以缓存Method。
另外有多少应用在意这快的0.xxx毫秒哪?!对现有系统影响小,api简单才是关键。
我一个java类,就只有
public String id = "ABCD";
&&& public int age = 20;
&&& public Integer age1 = 2000; 属性
//get/set.....
下面测试代码
JsonUtils里的工具方法
public static String getJson(Object obj) throws Exception{
StringWriter writer = new StringWriter();
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(writer, obj);
writer.close();
return writer.toString();
}catch (Exception ex){
}finally {
writer.close();
你得出的结论是:
jackson/json-lib : 2203 毫秒/ 1079毫秒
有些东西还是实际做做才知道真假
不知道ls有没有注意到我的测试里面对jackson其实有两种测试:jackson with cache和jackson without cache,前者才是正确的做法,因为ObjectMapper是线程安全的,后者是为了说明有的情况下,也会出现这样的对jackson错误的实践,而ls上面的使用方法刚好用了后者。
另外不知道为何ls测出的数据会这么大,我同样用了与ls一样的Object,属性也一样,循环次数也一样,结果测出来的时间jackson/json-lib: 64 毫秒/ 250毫秒
另外,这个东西我们公司里用的时候也是因为一次用了json-lib出了问题,然后换成jackson的,所以也是“实际做做才知道的”。另外,ls也应该可以看到上面的json-lib的序列化也太麻烦了。我比较不喜欢它的一个原因是因为它都引入了自己的类型,比如null并不是真正的null,而一个json-lib自己的一个表达Null的对象
希望楼主& [color=red]再详细测试一下反序列化的性能 [/color]
我没有做过详细的测试,但做过粗略的测试,两者相差的性能更大
我觉得你这个例子有点小问题啊,ObjectWrapper是在一个线程里公用的,不是在多个线程间公用的,一般高并发的话应该是要再多个线程间公用吧,那这个时候ObjectWrapper是线程安全的吗
,的确是有这个问题。。。之前确实没有注意到,更正确的做法是要在不同线程中公用,这样测出的性能应该更高。
另外这个ObjectMapper在官方文档上有说明,这个是线程安全的。
一个更详细的benchmark,详细比较了各种序列化机制的性能
/p/thrift-protobuf-compare/wiki/Benchmarking
这个文章我看过,只是忘了以后一直找不到这个文章了。
& 上一页 1
浏览: 51699 次
来自: 浙江
引用7、安装xrdp用于远程连接(添加10.10的源,并把xr ...
请问ObjectMapper的writevalue方法是线程安 ...
你的折线图怎么画出来的?
我迁移到maven之后,在Jboss下提示找不到资源文件,连w ...
myreligion 写道quaff 写道dieslrae 写 ...Java下常见的Json类库有Gson、JSON-lib和Jackson等,Jackson相对来说比较高效,在项目中主要使用Jackson进行JSON和Java对象转换,下面给出一些Jackson的JSON操作方法。
一、准备工作
Jackson有1.x系列和2.x系列,2.x系列有3个jar包需要下载:jackson-core-2.2.3.jar(核心jar包)jackson-annotations-2.2.3.jar(该包提供Json注解支持)jackson-databind-2.2.3.jar
一个maven依赖就够了
&dependency&
&groupId&com.fasterxml.jackson.core&/groupId&
&artifactId&jackson-databind&/artifactId&
&version&2.5.3&/version&
&/dependency&
import java.util.D
* JSON序列化和反序列化使用的User类
public class User {
public String getName() {
public void setName(String name) {
this.name =
public Integer getAge() {
public void setAge(Integer age) {
this.age =
public Date getBirthday() {
public void setBirthday(Date birthday) {
this.birthday =
public String getEmail() {
public void setEmail(String email) {
this.email =
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", birthday=" + birthday +
", email='" + email + '\'' +
二、JAVA对象转JSON[JSON序列化]
import java.io.IOE
import java.text.ParseE
import java.text.SimpleDateF
import java.util.ArrayL
import java.util.L
import com.fasterxml.jackson.databind.ObjectM
public class JacksonDemo {
public static void main(String[] args) throws ParseException, IOException {
User user = new User();
user.setName("zhangsan");
user.setEmail("");
user.setAge(20);
SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd");
user.setBirthday(dateformat.parse(""));
* ObjectMapper是JSON操作的核心,Jackson的所有JSON操作都是在ObjectMapper中实现。
* ObjectMapper有多个JSON序列化的方法,可以把JSON字符串保存File、OutputStream等不同的介质中。
* writeValue(File arg0, Object arg1)把arg1转成json序列,并保存到arg0文件中。
* writeValue(OutputStream arg0, Object arg1)把arg1转成json序列,并保存到arg0输出流中。
* writeValueAsBytes(Object arg0)把arg0转成json序列,并把结果输出成字节数组。
* writeValueAsString(Object arg0)把arg0转成json序列,并把结果输出成字符串。
ObjectMapper mapper = new ObjectMapper();
//User类转JSON
//输出结果:{"name":"zhangsan","age":20,"birthday":,"email":""}
String json = mapper.writeValueAsString(user);
System.out.println(json);
//Java集合转JSON
//输出结果:[{"name":"zhangsan","age":20,"birthday":,"email":""}]
List&User& users = new ArrayList&User&();
users.add(user);
String jsonlist = mapper.writeValueAsString(users);
System.out.println(jsonlist);
三、JSON转Java类[JSON反序列化]
public class JacksonDemo {
public static void main(String[] args) throws ParseException, IOException {
String json = "{\"name\":\"zhangsan\",\"age\":20,\"birthday\":,\"email\":\"\"}";
* ObjectMapper支持从byte[]、File、InputStream、字符串等数据的JSON反序列化。
ObjectMapper mapper = new ObjectMapper();
User user = mapper.readValue(json, User.class);
System.out.println(user);
User{name='zhangsan', age=20, birthday=Tue Oct 01 00:00:00 CST 1996, email=''}
public class JacksonDemo {
public static ObjectMapper mapper = new ObjectMapper();
public static void main(String[] args) throws ParseException, IOException {
String json = "[{\"name\":\"zhangsan\",\"age\":20,\"birthday\":,\"email\":\"\"}]";
List&User& beanList = mapper.readValue(json, new TypeReference&List&User&&() {});
System.out.println(beanList);
[User{name='zhangsan', age=20, birthday=Tue Oct 01 00:00:00 CST 1996, email=''}]
四、JSON注解
Jackson提供了一系列注解,方便对JSON序列化和反序列化进行控制,下面介绍一些常用的注解。@JsonIgnore 此注解用于属性上,作用是进行JSON操作时忽略该属性。@JsonFormat 此注解用于属性上,作用是把Date类型直接转化为想要的格式,如@JsonFormat(pattern = "yyyy-MM-dd HH-mm-ss")。@JsonProperty 此注解用于属性上,作用是把该属性的名称序列化为另外一个名称,如把trueName属性序列化为name,@JsonProperty("name")。
import com.fasterxml.jackson.annotation.JsonF
import com.fasterxml.jackson.annotation.JsonI
import com.fasterxml.jackson.annotation.JsonP
import java.util.D
* JSON序列化和反序列化使用的User类
public class User {
//不JSON序列化年龄属性
@JsonIgnore
//格式化日期属性
@JsonFormat(pattern = "yyyy年MM月dd日")
//序列化email属性为mail
@JsonProperty("my_email")
public String getName() {
public void setName(String name) {
this.name =
public Integer getAge() {
public void setAge(Integer age) {
this.age =
public Date getBirthday() {
public void setBirthday(Date birthday) {
this.birthday =
public String getEmail() {
public void setEmail(String email) {
this.email =
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", birthday=" + birthday +
", email='" + email + '\'' +
import com.fasterxml.jackson.databind.ObjectM
import java.io.IOE
import java.text.ParseE
import java.text.SimpleDateF
public class JacksonDemo {
public static void main(String[] args) throws ParseException, IOException {
User user = new User();
user.setName("zhangsan");
user.setEmail("");
user.setAge(20);
SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd");
user.setBirthday(dateformat.parse(""));
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(user);
System.out.println(json);
{"name":"zhangsan","birthday":"日","my_email":""}
阅读(...) 评论()如何使用jackson反序列化json到对象 - ITeye问答
{"indexs":[{"id":"6310_2","createTime":1,"indexFields":[{"name":"keyword_score","type":1,"analyzed":true,"highlight":true,"strValue":"2.1781344","longValue":0,"intValue":0},{"name":"object_id","type":1,"analyzed":true,"highlight":true,"strValue":"6310","longValue":0,"intValue":0},{"name":"object_type","type":1,"analyzed":true,"highlight":true,"strValue":"2","longValue":0,"intValue":0},{"name":"user_id","type":1,"analyzed":true,"highlight":true,"strValue":"657","longValue":0,"intValue":0},{"name":"user_name","type":1,"analyzed":true,"highlight":true,"strValue":"好书推荐","longValue":0,"intValue":0},{"name":"publish_time","type":1,"analyzed":true,"highlight":true,"strValue":"0","longValue":0,"intValue":0},{"name":"name","type":1,"analyzed":true,"highlight":true,"strValue":"水浒传","longValue":0,"intValue":0}]}]}
当前Indexs中只有一个Index对象
多格式 如何反序列化成Index的集合&
求大家指点
对象类型格式如下
问题补充:
采纳的答案
写个完整的,供你参考:
import java.util.L
import org.codehaus.jackson.JsonN
import org.codehaus.jackson.map.ObjectM
public class TestJackson {
private static String json = "{\"indexs\":[{\"id\":\"6310_2\",\"createTime\":1,\"indexFields\":[{\"name\":\"keyword_score\",\"type\":1,\"analyzed\":true,\"highlight\":true,\"strValue\":\"2.1781344\",\"longValue\":0,\"intValue\":0},{\"name\":\"object_id\",\"type\":1,\"analyzed\":true,\"highlight\":true,\"strValue\":\"6310\",\"longValue\":0,\"intValue\":0},{\"name\":\"object_type\",\"type\":1,\"analyzed\":true,\"highlight\":true,\"strValue\":\"2\",\"longValue\":0,\"intValue\":0},{\"name\":\"user_id\",\"type\":1,\"analyzed\":true,\"highlight\":true,\"strValue\":\"657\",\"longValue\":0,\"intValue\":0},{\"name\":\"user_name\",\"type\":1,\"analyzed\":true,\"highlight\":true,\"strValue\":\"好书推荐\",\"longValue\":0,\"intValue\":0},{\"name\":\"publish_time\",\"type\":1,\"analyzed\":true,\"highlight\":true,\"strValue\":\"0\",\"longValue\":0,\"intValue\":0},{\"name\":\"name\",\"type\":1,\"analyzed\":true,\"highlight\":true,\"strValue\":\"水浒传\",\"longValue\":0,\"intValue\":0}]}]}";
* @param args
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
JsonNode jsonNode = mapper.readTree(json);
JsonNode jn = jsonNode.get("indexs");
System.out.println(jn.toString());
Index p = mapper.readValue(json, Index.class);
System.out.println(p.getIndexs());
List&Model& indexs = p.getIndexs();
for(Model m : indexs) {
System.out.println(m.getId());
class Index {
private List&Model&
public List&Model& getIndexs() {
public void setIndexs(List&Model& indexs) {
this.indexs =
class Model {
private long createT
private List&Field& indexF
public Model() {
public String getId() {
public void setId(String id) {
public long getCreateTime() {
return createT
public void setCreateTime(long createTime) {
this.createTime = createT
public List&Field& getIndexFields() {
return indexF
public void setIndexFields(List&Field& indexFields) {
this.indexFields = indexF
class Field {
private String strV
private long longV
private int intV
public Field() {
public String getName() {
public void setName(String name) {
this.name =
public int getType() {
public void setType(int type) {
this.type =
public boolean isAnalyzed() {
public void setAnalyzed(boolean analyzed) {
this.analyzed =
public boolean isHighlight() {
public void setHighlight(boolean highlight) {
this.highlight =
public String getStrValue() {
return strV
public void setStrValue(String strValue) {
this.strValue = strV
public long getLongValue() {
return longV
public void setLongValue(long longValue) {
this.longValue = longV
public int getIntValue() {
return intV
public void setIntValue(int intValue) {
this.intValue = intV
给你写个简单的例子,仅供参考:
import java.util.L
import org.codehaus.jackson.JsonN
import org.codehaus.jackson.map.ObjectM
import org.codehaus.jackson.type.TypeR
public class TestJackson {
private static String json = "{\"indexs\":[{\"id\":\"6310_2\",\"createTime\":1,\"indexFields\":[{\"name\":\"keyword_score\",\"type\":1,\"analyzed\":true,\"highlight\":true,\"strValue\":\"2.1781344\",\"longValue\":0,\"intValue\":0},{\"name\":\"object_id\",\"type\":1,\"analyzed\":true,\"highlight\":true,\"strValue\":\"6310\",\"longValue\":0,\"intValue\":0},{\"name\":\"object_type\",\"type\":1,\"analyzed\":true,\"highlight\":true,\"strValue\":\"2\",\"longValue\":0,\"intValue\":0},{\"name\":\"user_id\",\"type\":1,\"analyzed\":true,\"highlight\":true,\"strValue\":\"657\",\"longValue\":0,\"intValue\":0},{\"name\":\"user_name\",\"type\":1,\"analyzed\":true,\"highlight\":true,\"strValue\":\"好书推荐\",\"longValue\":0,\"intValue\":0},{\"name\":\"publish_time\",\"type\":1,\"analyzed\":true,\"highlight\":true,\"strValue\":\"0\",\"longValue\":0,\"intValue\":0},{\"name\":\"name\",\"type\":1,\"analyzed\":true,\"highlight\":true,\"strValue\":\"水浒传\",\"longValue\":0,\"intValue\":0}]}]}";
* @param args
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
JsonNode jsonNode = mapper.readTree(json);
//JsonNode jn = jsonNode.get("indexs");
String id = jsonNode.get("indexs").toString();
System.out.println(id);
//List list =
mapper.readValue(person, new TypeReference&List&() {
//Person p = mapper.readValue(person,Person.class);
jackson主要使用下面两段代码完成反序列化话:
ObjectMapper mapper = new ObjectMapper();
JsonNode jsonNode = mapper.readTree(json); //json为json字符串
然后通过jsonNode再做相应的处理。如对于对象转换,直接使用
Person p = mapper.readValue(person,Person.class);
如果对于List类型,使用:
List list =
mapper.readValue(person, new TypeReference&List&() {
String personstr = getRequest().getParameter("persons");
JSONArray json = JSONArray.fromObject(personstr);
List&InvoidPerson& persons = (List&InvoidPerson&)JSONArray.toCollection(json, nvoidPerson.class);
已解决问题
未解决问题}

我要回帖

更多关于 医疗器械自动化 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信