一、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对象。