|
一、JSON库概述
在Java编程中,将Java Object类型数据转换成JSON数据格式的任务是很频繁的。为了实现这种转换,Java可以使用多种JSON库,如org.json、Gson、Jackson等。这些库主要分为两类:1)把Java数据转换到JSON格式;2)解析JSON数据格式。
二、使用org.json
org.json是一个小型的JSON解析器,可以非常方便地将Java对象转换为JSON对象。下面我们来介绍一些它的基本用法。
1.将Java Object转换成JSONObject
- JSONObject jsonObject = new JSONObject();
- jsonObject.put("name", "Tom");
- jsonObject.put("age", 22);
- jsonObject.put("gender", "male");
复制代码 上述代码将一个Java Object类型转换成了一个JSONObject对象。在这个JSON对象中,我们添加了三个键值对,用于展示JSONObject如何工作。在这个例子中,我们创建了一个JSON对象,然后使用put方法添加了三个键值对,分别表示“name”、“age”和“gender”这三个属性的值。
2.将Java数组转换成JSONArray
如果我们要将Java中的数组转换成JSONArray,可以使用如下代码
- JSONArray jsonArray = new JSONArray();
- String[] books = new String[]{"Java编程思想", "Effective Java"};
- for (String book : books) {
- jsonArray.put(book);
- }
复制代码 在这个例子中,我们定义了一个字符串数组books,然后把它的每一个元素逐个添加到JSONArray对象中,最后实现了Java数组向JSONArray的转换。
3.将Java List转换成JSONArray
如果我们要将Java中的List转换成JSONArray,可以使用如下代码
- JSONArray jsonArray = new JSONArray();
- List list = new ArrayList<>();
- list.add("John");
- list.add("Mary");
- list.add("Tom");
- for (String s : list) {
- jsonArray.put(s);
- }
复制代码 与将Java数组转换成JSONArray类似,我们可以逐个将List中的元素添加到JSONArray对象中来实现转换。JSONArray的put方法可以接受Java对象、JSON对象或JSON数组。因此,对于Java中的List、Set和数组类型来说,我们都可以使用这样的方式将它们转换为JSONArray对象。
三、使用Gson
与org.json相比,Gson更加强大、高效,具有更好的转换功能和更友好的编码方式。接下来我们来看一下Gson的用法。
1.将Java Object转换成JSON字符串
- User user = new User(101, "Tom", "tom@gmail.com");
- String json = new Gson().toJson(user);
复制代码 上述代码展示了如何实现Java Object类型到JSON字符串的转换。这里我们创建了一个User对象,然后使用Gson库的toJson方法将它转换为一个JSON字符串。我们可以通过调用User对象的getter方法或者反射来获取字段的值,这里就不再赘述。
2.将JSON字符串转换成Java Object
- String json = "{"id":101,"name":"Tom","email":"tom@gmail.com"}";
- User user = new Gson().fromJson(json, User.class);
复制代码 上述代码展示了如何实现JSON字符串到Java Object的转换。这里我们创建了一个JSON字符串,然后使用Gson库的fromJson方法将它转换为一个User对象。我们在fromJson方法中指定了目标类型的类名,Gson会根据源数据和目标类型类的信息转换成一个Java对象。如果目标类型是一个嵌套的Java对象,我们需要将该类型传递给Gson的fromJson()方法。
3.将Java Object转换成JSONObject
- User user = new User(101, "Tom", "tom@gmail.com");
- JsonObject jsonObject = new Gson().toJsonTree(user).getAsJsonObject();
复制代码 这个例子展示了如何使用Gson将Java Object转换成JSONObject。我们使用toJsonTree方法将User对象转换为JsonElement对象,然后使用getAsJsonObject方法将JsonElement转换成JsonObject对象。这样,我们就可以修改JsonObject对象中的属性,或者将它用于其它意图。
4.将Java数组或List转换成JSONArray
- List list = new ArrayList<>();
- list.add("John");
- list.add("Mary");
- list.add("Tom");
- JsonArray jsonArray = new Gson().toJsonTree(list).getAsJsonArray();
复制代码 这个例子展示了如何使用Gson将Java数组或List转换成JSONArray。我们使用toJsonTree方法将List对象转换为JsonElement对象,然后使用getAsJsonArray方法将JsonElement转换成JsonArray对象。
四、使用Jackson
Jackson是另一个流行的JSON库,它的API非常地丰富和强大。接下来我们来看一下Jackson的用法。
1.将Java Object转换成JSON字符串
- User user = new User(101, "Tom", "tom@gmail.com");
- String json = new ObjectMapper().writeValueAsString(user);
复制代码 这个例子展示了如何使用Jackson将Java Object转换成JSON字符串。我们使用ObjectMapper的writeValueAsString方法将Java对象转换为JSON字符串。
2.将JSON字符串转换成Java Object
- String json = "{"id":101,"name":"Tom","email":"tom@gmail.com"}";
- User user = new ObjectMapper().readValue(json, User.class);
复制代码 这个例子展示了如何使用Jackson将JSON字符串转换成Java Object。我们使用ObjectMapper的readValue方法将JSON字符串转换为Java对象。我们在readValue方法中指定了目标类型的类名,它会根据源数据和目标类型的信息来转换成一个Java对象。
3.将Java Object转换成JSONObject
- User user = new User(101, "Tom", "tom@gmail.com");
- ObjectNode objectNode = new ObjectMapper().valueToTree(user);
复制代码 这个例子展示了如何使用Jackson将Java Object转换成JSONObject。我们使用ObjectMapper的valueToTree方法将User对象转换为JsonNode对象,然后将它转换成ObjectNode对象。
4.将Java数组或List转换成JSONArray
- List list = new ArrayList<>();
- list.add("John");
- list.add("Mary");
- list.add("Tom");
- ArrayNode arrayNode = new ObjectMapper().valueToTree(list);
复制代码 这个例子展示了如何使用Jackson将Java数组或List转换成JSONArray。我们使用ObjectMapper的valueToTree方法将List对象转换为JsonNode对象,然后将它转换成ArrayNode对象。
|
|