JAVA中的四种JSON解析方式详解
我们在日常开发中少不了和JSON数据打交道,那么我们来看看JAVA中常用的JSON解析方式。
1、JSON官方 脱离框架使用
2、GSON
3、FastJSON 有问题
4、jackson 常用
JSON操作涉及到的类:
JSON官方的解析最具有通用性,但是有点小麻烦。
package cn.itcast.test; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import org.junit.Test; import java.util.ArrayList; public class JsonTest { @Test public void test1() { String json1 = "{\'id\':1,\'name\':\'JAVAEE-1703\',\'stus\':[{\'id\':101,\'name\':\'刘一\',\'age\':16},{\'id\':102,\'name\':\'刘二\',\'age\':23}]}"; //数组 String json2 = "[\'北京\',\'天津\',\'杭州\']"; // JSONObject jObject = new JSONObject(json1); JSONObject jsonObject = JSONObject.fromObject(json1); // System.out.println(jsonObject); // Map<String,Object> map = jsonObject; // for (Map.Entry<String, Object> entry : map.entrySet()) { // System.out.println(entry.getKey()); // System.out.println(entry.getValue()); // System.out.println("========="); // } Grade grade = new Grade(); grade.setId(jsonObject.getInt("id")); grade.setName(jsonObject.getString("name")); ArrayList<Student> students = new ArrayList<>(); grade.setStus(students); JSONArray stus = jsonObject.getJSONArray("stus"); for (Object o : stus) { // System.out.println(o); JSONObject jsonObject1 = JSONObject.fromObject(o); Student student = new Student(jsonObject1.getInt("id"), jsonObject1.getString("name"), jsonObject1.getInt("age")); grade.getStus().add(student); } System.out.println(grade); } @Test public void test2(){ JSONObject jsonObject = new JSONObject(); jsonObject.put("id", 100); jsonObject.put("name", "二弟"); jsonObject.put("age", 30); JSONObject jsonObject1 = new JSONObject(); jsonObject1.put("id", 102); jsonObject1.put("name", "狗蛋"); jsonObject1.put("age", 10); JSONArray jsonArray = new JSONArray(); jsonArray.add(jsonObject); jsonArray.add(jsonObject1); System.out.println(jsonArray); } }GSON解析是谷歌的,也比较好用
public class GSONTest { //解析 @Test public void test1() { // 对象嵌套数组嵌套对象 String json1 = "{\'id\':1,\'name\':\'JAVAEE-1703\',\'stus\':[{\'id\':101,\'name\':\'刘一\',\'age\':16}]}"; // 数组 String json2 = "[\'北京\',\'天津\',\'杭州\']"; Gson gson=new Gson(); //1、 //解析对象:第一个参数:待解析的字符串 第二个参数结果数据类型的Class对象 Grade grade=gson.fromJson(json1, Grade.class); System.out.println(grade); //2、 //解析数组要求使用Type ArrayList<String> list=gson.fromJson(json2, new TypeToken<ArrayList<String>>(){}.getType()); System.out.println(list); } //生成 @Test public void test2(){ ArrayList<Student> list=new ArrayList<>(); for(int i=1;i<3;i++){ list.add(new Student(101+i, "码子", 20+i)); } Grade grade=new Grade(100001,"张三", list); Gson gson=new Gson(); //将对象转换为诶JSON格式字符串 String json=gson.toJson(grade); System.out.println(json); } }FastJSON是阿里巴巴的产品,效率最高
public class FASTJson { //解析 @Test public void test1() { // 对象嵌套数组嵌套对象 String json1 = "{\'id\':1,\'name\':\'JAVAEE-1703\',\'stus\':[{\'id\':101,\'name\':\'刘铭\',\'age\':16}]}"; // 数组 String json2 = "[\'北京\',\'天津\',\'杭州\']"; //1、 //静态方法 Grade grade=JSON.parseObject(json1, Grade.class); System.out.println(grade); //2、 List<String> list=JSON.parseArray(json2, String.class); System.out.println(list); } //生成 @Test public void test2(){ ArrayList<Student> list=new ArrayList<>(); for(int i=1;i<3;i++){ list.add(new Student(101+i, "码子", 20+i)); } Grade grade=new Grade(100001,"张三", list); String json=JSON.toJSONString(grade); System.out.println(json); } }