一 jackson
Jackson有1.x系列和2.x系列,2.x系列有3个jar包需要下载:
jackson-core-2.2.3.jar(核心jar包)
jackson-annotations-2.2.3.jar(该包提供Json注解支持)
jackson-databind-2.2.3.jar (包含以上两个)
maven依赖
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.3</version>
</dependency>
由于篇幅和时间原因,这里不再写model,都用list,map代替
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* json解析测试
*
* @Author: Mr_li
* @CreateDate: 2018-11-07$ 14:48$
* @Version: 1.0
*/
public class JackSonTestCase {
private static ObjectMapper mapper = new ObjectMapper();
/**
* 数据准备
*/
static class getData {
Map<String, Object> map = new HashMap<String, Object>();
List<String> list = new ArrayList<>();
List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();
public Map<String, Object> getMap() {
map.put("name", "张三");
map.put("age", "18");
return map;
}
public List<String> getList() {
list.add("a");
list.add("b");
return list;
}
public List<Map<String, Object>> getListMap() {
listMap.add(getMap());
return listMap;
}
}
/**
* ObjectMapper是JSON操作的核心,Jackson的所有JSON操作都是在ObjectMapper中实现。
* ObjectMapper有多个JSON序列化的方法,可以把JSON字符串保存File、OutputStream等不同的介质中。
* writeValue(File arg0, Object arg1)把arg1转成json序列,并保存到arg0文件中。
* writeValue(OutputStream arg0, Object arg1)把arg1转成json序列,并保存到arg0输出流中。
* writeValueAsBytes(Object arg0)把arg0转成json序列,并把结果输出成字节数组。
* writeValueAsString(Object arg0)把arg0转成json序列,并把结果输出成字符串。
*/
public static void test() throws IOException {
//javaObj-->>jsonStr
String json = mapper.writeValueAsString(new getData().getMap());
//jsonStr-->>jsonObj
String json1 = "{ \"brand\" : \"Mercedes\", \"doors\" : 5 }";
//1
Object o = mapper.readValue(json, Object.class);
//2
List<Map<String, Object>> beanList = mapper.readValue(json, new TypeReference<List<Map<String, Object>>>() {
});
}
public static void main(String[] args) throws IOException {
JackSonTestCase.test();
}
}
二 fastjson
fastJson对于json格式字符串的解析主要用到了一下三个类:
JSON:fastJson的解析器,用于JSON格式字符串与JSON对象及javaBean之间的转换。
JSONObject:fastJson提供的json对象。
JSONArray:fastJson提供json数组对象。
maven依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.51</version>
</dependency>
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* json解析测试
*
* @Author: Mr_li
* @CreateDate: 2018-11-07$ 14:48$
* @Version: 1.0
*/
public class FastjsonTestCase {
private static JSONObject jsonObject = new JSONObject();
private static JSONArray jsonArr = new JSONArray();
class Student {
private String studentName;
private Integer studentAge;
public String getStudentName() {
return studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
public Integer getStudentAge() {
return studentAge;
}
public void setStudentAge(Integer studentAge) {
this.studentAge = studentAge;
}
}
/**
* 数据准备
*/
static class getData {
Map<String, Object> map = new HashMap<String, Object>();
List<String> list = new ArrayList<>();
List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();
public Map<String, Object> getMap() {
map.put("name", "张三");
map.put("age", "18");
return map;
}
public List<String> getList() {
list.add("a");
list.add("b");
return list;
}
public List<Map<String, Object>> getListMap() {
listMap.add(getMap());
return listMap;
}
}
public static void test() throws IOException {
//jsonStr-->>jsonObj
String json1 = "{\"studentName\":\"lily\",\"studentAge\":12}";
JSONObject jsonObject = JSON.parseObject(json1);
//jsonStr-->>jsonArray
String json2 = "[{\"studentName\":\"lily\",\"studentAge\":12},{\"studentName\":\"lucy\",\"studentAge\":15}]";
JSONArray jsonArray = JSON.parseArray(json1);
//jsonstr-->>javaObj
Student student = JSON.parseObject(json2, Student.class);
List<Student> list = new ArrayList<Student>();
ArrayList<Student> list1 = (ArrayList<Student>) JSONObject.parseObject(json2, List.class);
//javaObj-->>jsonStr
String jsonString = JSON.toJSONString(student);
}
public static void main(String[] args) throws IOException {
FastjsonTestCase.test();
}
}
三 gson
目前网络上有很多接口是Json形式的,Gson是谷歌开源的Json解析库,可以方便的将Java对象转换成Json字符串,也可以方便的将Json字符串转换成Java对象。
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
</dependency>
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* json解析测试
*
* @Author: Mr_li
* @CreateDate: 2018-11-07$ 14:48$
* @Version: 1.0
*/
public class GsonTestCase {
private static Gson gson = new Gson();
private static JsonParser parser = new JsonParser();
class Student {
private String studentName;
private Integer studentAge;
public String getStudentName() {
return studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
public Integer getStudentAge() {
return studentAge;
}
public void setStudentAge(Integer studentAge) {
this.studentAge = studentAge;
}
}
/**
* 数据准备
*/
static class getData {
Map<String, Object> map = new HashMap<String, Object>();
List<String> list = new ArrayList<>();
List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();
public Map<String, Object> getMap() {
map.put("name", "张三");
map.put("age", "18");
return map;
}
public List<String> getList() {
list.add("a");
list.add("b");
return list;
}
public List<Map<String, Object>> getListMap() {
listMap.add(getMap());
return listMap;
}
}
public static void test() throws IOException {
//jsonStr-->>jsonObj
String json1 = "{\"studentName\":\"lily\",\"studentAge\":12}";
JsonObject jsonObject = (JsonObject) parser.parse(json1);
JsonElement parse = parser.parse(json1);
JsonObject asJsonObject = parse.getAsJsonObject();
//jsonStr-->>jsonArray
String json2 = "[{\"studentName\":\"lily\",\"studentAge\":12},{\"studentName\":\"lucy\",\"studentAge\":15}]";
JsonArray jsonArray = (JsonArray) parser.parse(json1);
JsonElement parse1 = parser.parse(json1);
JsonArray asJsonArray = parse1.getAsJsonArray();
//jsonStr-->>javaObj
Student student = new Gson().fromJson(json1, Student.class);
HashMap<String, Student> studentHashMap = gson.fromJson(json1, new TypeToken<HashMap<String, Student>>() {
}.getType());
//javaObj-->>jsonStr
String json = gson.toJson(student);
}
public static void main(String[] args) throws IOException {
GsonTestCase.test();
}
}
perfect!!!