Java中 Json的使用
Java JSON
本章节我们将为大家介绍如何在 Java 语言中使用 JSON。
类库选择
Java中并没有内置JSON的解析,因此使用JSON需要借助第三方类库。
下面是几个常用的 JSON 解析类库。
-
Gson:谷歌开发的 JSON 库,功能十分全面。
-
FastJson:阿里巴巴开发的 JSON 库,性能十分优秀。
-
Jackson:社区十分活跃且更新速度很快。
以下教程基于 FastJson 讲解。
环境配置
在 Maven 构建的项目中,在pom.xml
文件中加入以下依赖即可。
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.47</version> </dependency>
编码与解码
编码
从Java变量到 JSON 格式的编码过程如下:
public void testJson() { JSONObject object = new JSONObject(); //string object.put("string","string"); //int object.put("int",2); //boolean object.put("boolean",true); //array List<Integer> integers = Arrays.asList(1,2,3); object.put("list",integers); //null object.put("null",null); System.out.println(object); }
在上述代码中,首先建立一个 JSON 对象,然后依次添加字符串,整数,布尔值以及数组,最后将其打印为字符串。 输出结果如下:
{"boolean":true,"string":"string","list":[1,2,3],"int":2}
解码
从 JSON 对象到 Java 变量的解码过程如下:
public void testJson2() { JSONObject object = JSONObject .parseObject("{\"boolean\":true,\"string\":\"string\",\"list\":[1,2,3],\"int\":2}"); //string String s = object.getString("string"); System.out.println(s); //int int i = object.getIntValue("int"); System.out.println(i); //boolean boolean b = object.getBooleanValue("boolean"); System.out.println(b); //list List<Integer> integers = JSON.parseArray(object.getJSONArray("list").toJSONString(),Integer.class); integers.forEach(System.out::println); //null System.out.println(object.getString("null")); }
在上例中,首先从 JSON 格式的字符串中构造一个 JSON 对象,之后依次读取字符串,整数,布尔值以及数组,最后分别打印,打印结果如下:
string 2 true 1 2 3 null
JSON 对象与字符串的相互转化
方法 | 作用 |
---|---|
JSON.parseObject() |
从字符串解析 JSON 对象 |
JSON.parseArray() |
从字符串解析 JSON 数组 |
JSON.toJSONString(obj/array) |
将 JSON 对象或 JSON 数组转化为字符串 |
实例:
//从字符串解析JSON对象 JSONObject obj = JSON.parseObject("{\"runoob\":\"菜鸟教程\"}"); //从字符串解析JSON数组 JSONArray arr = JSON.parseArray("[\"菜鸟教程\",\"RUNOOB\"]\n"); //将JSON对象转化为字符串 String objStr = JSON.toJSONString(obj); //将JSON数组转化为字符串 String arrStr = JSON.toJSONString(arr);
Gson的使用
由于最近需要使用Gson,而Gson和fastjson在使用上还是有所区别的,所以今天稍微试一下Gson的使用.
测试代码如下:
import com.google.common.reflect.TypeToken; import com.google.gson.Gson; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.google.gson.annotations.SerializedName; import java.util.List; /** * Created by pfliu on 2019/05/16. */ public class GsonTest { public static void main(String[] args) { Gson gson = new Gson(); JsonParser parser = new JsonParser(); // 从json字符串拿到java对象并且拿到某些字段 String input = "{\"name\": \"huyanshi\", \"age\": 2}"; User user = gson.fromJson(input, User.class); System.out.println(user.name); System.out.println(user.age); //从json字符串拿到json对象并且获取某些字段 JsonObject jo = parser.parse(input).getAsJsonObject(); System.out.println(jo.get("name").getAsString()); System.out.println(jo.get("age").getAsInt()); // 从json字符串解析json的list //language=JSON String i1 = "[{\"name\":\"huyanshi\",\"age\":\"12\"},{\"name\":\"huyanshi1\",\"age\":\"122\"}]"; List<User> users = gson.fromJson(i1, new TypeToken<List<User>>() { }.getType()); System.out.println(users.toString()); //新建一个json对象并添加某些字段,之后输出字符串 JsonObject jo1 = new JsonObject(); jo1.addProperty("name", "huyanshi"); jo1.addProperty("age", "12"); System.out.println(jo1.toString()); // 将java对象或者数组转换为json字符串 String a1 = gson.toJson(user); String a2 = gson.toJson(users); System.out.println(a1); System.out.println(a2); //测试注解@SerializedName, User u = new User(); u.name = "huyan"; u.age = 2; System.out.println(gson.toJson(u)); } private static class User { @SerializedName(value = "nn") String name; int age; @Override public String toString() { return "User{" + "name='" + name + '\'' + ", age=" + age + '}'; } } }
完。