有时候在调试代码时,需要格式化输出JSON字符串,使其便于开发者/测试者查看,本文记录的就是使用Gson如何格式化输出JSON字符串。

Gson默认的JSON输出是紧凑的JSON格式,这意味着在输出的JSON结构中没有任何空白字符,因此,在JSON输出中,字段名及其字段值,对象字段和数组中的对象间都没有空白字符,另外“null”字段在输出时会忽略(NOTE:collections/arrays中的null值会保留)。如果要使用Pretty Print输出JSON,可以使用GsonBuilder配置JsonPrintFormatter,该格式默认会输出80字符宽度,2字符缩进,右边距为4字符。

Continue reading

本文记录Java中关闭Chained-Streams的正确方式。

在Java开发过程中,我们时常使用这样的方式创建输入输出流,如下方式1:

1
BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));

或者如下方式2创建:

1
2
3
FileOutputStream fos = new FileOutputStream(...)
BufferedOS bos = new BufferedOS(fos);
ObjectOutputStream oos = new ObjectOutputStream(bos);

使用方式1时,我们仅仅使用br.close()是否会造成流资源的不正确关闭?使用方式2时,是否需要把创建的每个流(oos/bos/fos)都依次关闭呢?

Continue reading

项目中有时需要在Java类中启动一个长时间运行的服务进程(监听进程、监控进程等),且该进程需要在tomcat启动时启动,在tomcat停止时退出。在项目开发的过程中,我需要在Java类中启动一个监听进程,而在该进程成功启动后,一调用该监听服务进程时,该进程就挂掉(退出),现将解决方法记录如下。

Continue reading

本文记录的是如何在Java类中调用外部可执行脚本,例如shell脚本、Python脚本、ruby脚本等。文中阐述了Runtime.exec和ProcessBuilder.start两种调用脚本的方式,官方推荐使用后者的方式,下面对其分别讲述。

Continue reading

本文记录的是如何使用markdown命名锚(names anchors),当使用命名锚时,我们可以创建文章目录,直接跳至该命名锚(比如页面中某个小节)的链接,这样使用者就无需不停地滚动页面来寻找他们需要的信息了。

其实使用markdown不能直接达到定义命名锚的目的,借助了html的功能。在定义标题时不使用markdown语法(#个数对应相应级别的HTML样式标题),而使用h1/h2等,且使用id属性命名锚,如:

Continue reading

本文记录的是如何使用Gson序列化和反序列化包含不同类型对象的 JSON Array,例如:

1
['hello',5,{name:'GREETINGS',source:'guest'}]

对于这种情况看,使用 Gson toJson(collection) 序列化,无需做额外的工作都能够得到正确的结果,但是,使用 fromJson(json, Collection.class) 反序列化时不能得到期望结果,因为Gson不知道如何将集合中元素与其类型对应起来。可采用如下解决方法: 使用Gson parser API(JsonParser)解析数组中每个元素,然后对数组中每个元素使用Gson.fromJson()进行反序列化。示例如下:

Continue reading

本文记录的是使用Gson如何序列化和反序列化实体中部分属性,有两种方式,使用transient和使用注解@Expose.

默认情况下,如果使用transient标注属性,那个该属性在序列化和反序列化时就会被屏蔽。同样地,如果属性声明为static类型,那么该属性也会被屏蔽. 如下示例所示:

Student对象:

1
2
3
4
5
6
7
public class Student {
private int stuNo;
private transient int sex;
private String name;

//......
}
Continue reading

本文记录的是如何使用Gson处理List对象数据, 包括序列化List对象以及将Json串反序列化为List对象.

首先定义一个Student类, 其属性都是基本类型, 如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Student {
private int stuNo;
private int sex;
private String name;
public Student() {
}

public Student(int stuNo, int sex, String name) {
this.stuNo = stuNo;
this.sex = sex;
this.name = name;
}
//getter & setter
......
}
Continue reading

本文记录的是如何使用Gson处理Array类型数据, 包括将Array对象序列化为Json串以及将Json串反序列化为Array对象.

下面的示例是将数组元素序列化为Json串,如下所示:

Serialization:

1
2
3
4
5
Gson gson = new Gson();
int[] ints = {1, 2, 3, 4, 5};
String[] strings = {"abc", "def", "ghi"};
System.out.println("json_string: " + gson.toJson(ints));
System.out.println("json_string: " + gson.toJson(strings));
Continue reading
Author's picture

CaryaLiu

@Chengdu,WeChat:CaryaLiu


Teacher


Chengdu