JSON

有效选择七个关于 Java 的 JSON 开源类库

字号+ 作者:H5之家 来源:H5之家 2017-06-22 13:01 我要评论( )

简介 JSON是JavaScriptObjectNotation的缩写,是一种轻量级的数据交换形式,是一种XML的替代方案,而且比XML更小,更快而且更易于解析。因为JSON描述对象的时候

简介

JSON是JavaScriptObjectNotation的缩写,是一种轻量级的数据交换形式,是一种XML的替代方案,而且比XML更小,更快而且更易于解析。因为JSON描述对象的时候使用的是JavaScript语法,它是语言和平台独立的,并且这些年许多JSON的解析器和类库被开发出来。在这篇文章中,我们将会展示7种JavaJSON类库。基本上,我们将会试着把Java对象转换JSON格式并且存储到文件,并且反向操作,读JSON文件转换成一个对象。为了让文章更有意义,我们将会测量每一种JSON类库在不同情况下的处理速度。

(一)类库介绍及其使用

(1)使用Jackson类库

第一个介绍的是Jackson类库,Jackson库是一个“旨在为开发者提供更快,更正确,更轻量级,更符合人性思维”的类库。Jackson为处理JSON格式提供了三种模型的处理方法。

1、流式API或者增量解析/产生(incrementalparsing/generation):读写JSON内容被作为离散的事件。

2、树模型:提供一个可变内存树表示JSON文档。

3、数据绑定(Databinding):实现JSON与POJO(简单的Java对象(PlainOldJavaObject))的转换

我们感兴趣的是Java对象与JSON的转换,因此,我们将集中于第三种处理方法。首先我们需要下载Jackson。Jackson的核心功能使用三个类库,分别是jackson-core-2.3.1,jackson-databind-2.3.1和jackson-annotations-2.3.1;三个类库的下载都来自于Maven仓库,给出地址:

(译者注:在中,正好是三个类库的文件夹)

现在,让我们来工作吧,为了从Java对象中获得一个一个复杂的JSON对象,我们将会使用下面的类去构造一个对象。同样的Java对象将会被用于这篇文章的所有的类库中。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

 

 

publicclassJsonThirdObject{

privateintage=81;

privateStringname="MichaelCaine";

privateList<String>messages;

publicJsonThirdObject(){

this.messages=newArrayList<String>(){

{

add("Youwouldn'thitamanwithnotrousers..");

add("Atthispoint,I'dsetyouupwitha..");

add("Youknow,yourbobbydangler,gigglestick,..");

}

};

}

//Getterandsetter

}

publicclassJsonSecondObject{

privateintage=83;

privateStringname="ClintEastwood";

privateJsonThirdObjectjsnTO=newJsonThirdObject();

privateList<String>messages;

publicJsonSecondObject(){

this.messages=newArrayList<String>(){

{

add("ThisistheAK-47assault..");

add("Areyoufeelinglucky..");

add("Whenanakedman'schasinga..");

}

};

}

//Getterandsetter

}

publicclassJsonFirstObject{

privateintage=76;

privateStringname="MorganFreeman";

privateJsonSecondObjectjsnSO=newJsonSecondObject();

privateList<String>messages;

publicJsonFirstObject(){

this.messages=newArrayList<String>(){

{

add("Ionceheardawisemansay..");

add("Well,whatisittoday?More..");

add("Bruce...I'mGod.Circumstanceshave..");

}

};

}

//Getterandsetter

}

publicclassJson{

privateintage=52;

privateStringname="JimCarrey";

privateJsonFirstObjectjsnFO=newJsonFirstObject();

privateList<String>messages;

publicJson(){

this.messages=newArrayList<String>(){

{

add("Hey,maybeIwillgiveyou..");

add("Excuseme,I'dliketo..");

add("Brainfreeze.AlrightyThenIjust..");

}

};

}

//Getterandsetter

}

上面的Java对象转换成JSON格式是下面这样的。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

 

{

"age":52,

"name":"JimCarrey",

"jsnFO":{

"age":76,

"name":"MorganFreeman",

"jsnSO":{

"age":83,

"name":"ClintEastwood",

"jsnTO":{

"age":81,

"name":"MichaelCaine",

"messages":[

"Youwouldn'thitaman..",

"Atthispoint,I'dsetyou..",

"Youknow,yourbobbydangler.."

]

},

"messages":[

"ThisistheAK-47assault..",

"Areyoufeelinglucky..",

"Whenanakedman'schasinga.."

]

},

"messages":[

"Ionceheardawiseman..",

"Well,whatisittoday?More..",

"Bruce...I'mGod.Circumstanceshave.."

]

},

"messages":[

"Hey,maybeIwillgiveyouacall..",

"Excuseme,I'dliketoaskyouafew..",

"Brainfreeze.AlrightyThenIjustheard.."

]

}

现在,让我们来看看怎么样把Java对象转换成JSON并且写入文件。Jackson使用一个ObjectMapper功能,我们第一步要做的是:

1

2

3

JsonjsonObj=newJson();

ObjectMappermapper=newObjectMapper();

然后,我们将会使用这个ObjectMapper直接写入值到文件。

1

2

3

4

5

6

7

 

System.out.println("ConvertJavaobjecttoJSONformatandsavetofile");

try{

mapper.writeValue(newFile("c:jackson.json"),jsonObj);

}catch(JsonGenerationExceptione){

}catch(JsonMappingExceptione){

}catch(IOExceptione){

}

现在,我们有了一个JSON文件,但是,怎么样转回Java对象呢?我们可以这样做:

1

2

3

4

5

6

7

8

System.out.println("ReadJSONfromfile,convertJSONbacktoobject");

try{

jsonObj=mapper.readValue(newFile("c:jackson.json"),Json.class);

}catch(JsonGenerationExceptione){

}catch(JsonMappingExceptione){

}catch(IOExceptione){

}

从上面的例子我们知道了JSON和Java对象的相互转换,在try-catch中总共也就两行,看起来不错是吧,但是它快么?我们将会在后面的文章中揭晓。

(2)使用Google-Gson类库

第二种就是Google-Gson,我们立即开始讨论Gson,你或许更喜欢他的全名Google-Gson。Gson能实现Java对象和JSON之间的相互转换。甚至都不需要注释。Gson的特点:

1)提供简单的toJson()方法和fromJson()去实现相互转换。

2)可以从JSON中转换出之前存在的不可改变的对象。

3)扩展提供了Java泛型。

4)支持任意复杂的对象。

Gson就需要一个.jar文件,gson-2.2.4.jar,可以通过下载。下面是例子,把Java对象转换成JSON。

1

2

3

4

5

6

7

8

JsonjsonObj=newJson();

Gsongson=newGson();

System.out.println("ConvertJavaobjecttoJSONformatandsavetofile");

try(FileWriterwriter=newFileWriter("c:gson.json")){

writer.write(gson.toJson(jsonObj));

}catch(IOExceptione){

}

JSON转换成Java对象:

1

2

3

4

5

6

 

System.out.println("ReadJSONfromfile,convertJSONstringbacktoobject");

try(BufferedReaderreader=newBufferedReader(newFileReader("c:gson.json"))){

jsonObj=gson.fromJson(reader,Json.class);

}catch(FileNotFoundExceptione){

}catch(IOExceptione){

}

上面就是我们所有需要做的,接下来我们可以对jsonObj作进一步处理。当调用JSON操作的时候,因为Gson的实例化对象没有维持任何状态,我们可以重复使用一个对象为多个JSON序列化和反序列化操作。

(3)使用JSON-lib类库

JSON-lib类库是基于DouglasCrockford的工作成果,能转换bean,map,集合(collection),java数组和XML转换成JSON并能反向转换成beans和动态bean(DynaBean)。JSON-lib类库的下载地址:下面这些是依赖文件

·jakartacommons-lang2.6

·jakartacommons-beanutils1.9.1

·jakartacommons-collections3.2.1

·jakartacommons-logging1.1.3

·ezmorph1.0.6

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • jQuery选择器中含有空格的使用...

    jQuery选择器中含有空格的使用...

    2017-06-18 15:04

  • 学习使用JMeter进行RESTful API测试的有效技术和最佳实践(2)

    学习使用JMeter进行RESTful API测试的有效技术和最佳实践(2)

    2016-11-12 14:00

  • ecshop软件的商品颜色尺寸属性、仿淘宝选择功能简介

    ecshop软件的商品颜色尺寸属性、仿淘宝选择功能简介

    2015-10-10 12:35

网友点评
i