您的位置:

Gson对象转json字符串的方法详解

一、json对象转json字符串null

当我们的json数据为null时,直接使用toJson方法不能得到我们想要的结果。传统的做法可能是通过判断null并手动赋值为"null",但这种方法不够优雅且易错。Gson提供了一个专门转换null的方法nullSafe(),具体使用如下:

String json = gson.toJson(null);
//输出结果为null
String jsonSafe = gson.toJson(null, Object.class).nullSafe();
//输出结果为"null"

可以看到,通过nullSafe()方法可以避免手动处理null值的繁琐,提高开发效率。

二、gson map转json字符串

通常我们会收到一些json格式的字符串,而这些数据很可能是以map的形式组织的。在这种情况下,我们需要将map转换成json格式字符串。这个过程非常简单,只需要调用gson.toJson()方法即可:

Map<String, Object> map = new HashMap<>();
map.put("name", "张三");
map.put("age", 18);
String json = gson.toJson(map);
//输出结果为{"name":"张三","age":18}

三、json对象转字符串

在开发过程中,我们往往需要将一个java对象转换成json对象。这时候,我们可以采用如下代码:

class Student {
  private String name;
  private int age;
  public Student(String name, int age) {
    this.name = name;
    this.age = age;
  }
}
Student stu = new Student("张三", 18);
String jsonStr = gson.toJson(stu);
//输出结果为{"name":"张三","age":18}

可以看到,我们只需要编写一个类,将实际需转换的数据放在类中,调用toJson()方法即可。

四、json字符串转json对象

在开发过程中,我们也会需要将字符串类型的json数据转换成json对象。这时候,我们可以采用如下代码:

String jsonStr = "{\"name\":\"张三\",\"age\":18}";
JsonElement jsonElement = new JsonParser().parse(jsonStr);
JsonObject jsonObj = jsonElement.getAsJsonObject();
System.out.println(jsonObj.get("name").getAsString());//输出结果为"张三"
System.out.println(jsonObj.get("age").getAsInt());//输出结果为18

JsonParser类能够将json字符串转换成JsonElement对象。JsonElement对象可被转换成不同的json对象。在本例中,我们使用getAsJsonObject()方法将JsonElement对象转换成JsonObject对象,便可以从中取出实际的值了。

五、json对象转成json字符串

在反过来,也需要将json对象转成json字符串。可以使用 Gson 的 toJson 方法将一个对象转化为 JSON 格式的字符串。

JsonObject obj = new JsonObject();
obj.addProperty("name", "张三");
obj.addProperty("age", 25);
String jsonStr = gson.toJson(obj);
//输出结果为{"name":"张三","age":25}

六、json字符串转map对象

将json字符串转换为map对象也是非常常见的操作。我们可以使用如下代码实现:

String jsonStr = "{\"name\":\"张三\",\"age\":18}";
Type type = new TypeToken<Map<String, Object>>(){}.getType();
Map<String, Object> map = gson.fromJson(jsonStr, type);
System.out.println(map.get("name"));//输出结果为"张三"
System.out.println(map.get("age"));//输出结果为18

需要注意的是,为了让Gson能够将JSON字符串正确的转换成Map,我们需要显式的定义TypeToken类型,否则Gson会将map的值转换成String类型而不是原本的数据类型。

七、gson list转json字符串

除了map,list也是非常普遍的数据类型。我们采用如下代码将list转换成json字符串:

List<String> list = new ArrayList<>();
list.add("张三");
list.add("李四");
String jsonStr = gson.toJson(list);
//输出结果为["张三","李四"]

同样不需要在toJson方法中再指定需要转换的数据类型,Gson已经自动处理好了。

八、gson解析json字符串为对象

反过来,我们需要将json字符串转换成java对象。如果是简单的类型,可以通过fromJson方法直接解析成对象:

String jsonStr = "{\"name\":\"张三\",\"age\":18}";
Student stu = gson.fromJson(jsonStr, Student.class);
System.out.println(stu.getName());//输出结果为"张三"

需要注意的是,fromJson方法中第二个参数是需要转换的数据类型,这里传入的是Student.class。这样就能够快速的将json字符串转换成java对象。

九、json字符串转对象

在python中,有类似于Java中Gson的库处理json数据,如何将python中的json字符串转换成java对象呢?下面是一个案例:

String jsonStr = "{\"name\":\"张三\",\"age\":18}";
JsonElement jsonElement = new JsonParser().parse(jsonStr);
Map<String, Object> map = gson.fromJson(jsonElement, new TypeToken<Map<String, Object>>(){}.getType());
Student stu = new Student((String) map.get("name"), (int)map.get("age"));
System.out.println(stu.getName());//输出结果为"张三"

需要注意的是,我们需要使用JsonPaser将json字符串转化为JsonElement类型,再使用getType()定义数据类型,才能成功地转化成map对象。