Java JSON
本章节我们将为大家介绍如何在 Java 语言中使用 JSON。
类库选择
Java中并没有内置JSON的解析,因此使用JSON需要借助第三方类库。
下面是几个常用的 JSON 解析类库。
Gson:谷歌开发的 JSON 库,功能十分全面。
FastJson:阿里巴巴开发的 JSON 库,性能十分优秀。
Jackson:社区十分活跃且更新速度很快。
以下教程基于 FastJson 讲解。
环境配置
在 Maven 构建的项目中,在pom.xml文件中加入以下依赖即可。
com.alibaba
fastjson
1.2.47
编码与解码
编码
从Java变量到 JSON 格式的编码过程如下:
public voidtestJson() {
JSONObject object= newJSONObject();//string
object.put("string","string");//int
object.put("int",2);//boolean
object.put("boolean",true);//array
List 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,3],"int":2}
解码
从 JSON 对象到 Java 变量的解码过程如下:
public voidtestJson2() {
JSONObject object=JSONObject
.parSEObject("{\"boolean\":true,\"string\":\"string\",\"list\":[1,\"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 integers = JSON.parseArray(object.getJSONArray("list").toJSONString(),Integer.class);
integers.forEach(System.out::println);//null
System.out.println(object.getString("null"));
}
在上例中,首先从 JSON 格式的字符串中构造一个 JSON 对象,之后依次读取字符串,整数,布尔值以及数组,最后分别打印,打印结果如下:
string2
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的使用.
测试代码如下:
importcom.google.common.reflect.TypeToken;importcom.google.gson.Gson;importcom.google.gson.JsonObject;importcom.google.gson.JsonParser;importcom.google.gson.annotations.SerializedName;importjava.util.List;/*** Created by pfliu on 2019/05/16.*/
public classGsonTest {public static voidmain(String[] args) {
Gson gson= newGson();
JsonParser parser= newJsonParser();//从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 users = gson.fromJson(i1,new TypeToken>() {
}.getType());
System.out.println(users.toString());//新建一个json对象并添加某些字段,之后输出字符串
JsonObject jo1 = newJsonObject();
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 = newUser();
u.name= "huyan";
u.age= 2;
System.out.println(gson.toJson(u));
}private static classUser {
@SerializedName(value= "nn")
String name;intage;
@OverridepublicString toString() {return "User{" +
"name=‘" + name + ‘\‘‘ +
",age=" + age +
‘}‘;
}
}
}
完。