一、JSON官方提供的解析
1、相关依赖
<!-- JSONObject的依赖 --> <dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</artifactId> <version>2.2.3</version> <classifier>jdk15</classifier><!--必须设置JDK版本,不然依赖会出错--> </dependency>
2、在类中导包
import net.sf.json.JSONArray; import net.sf.json.JSONObject;
3、将Json格式的String字符串转换为JSONObject对象(JSONObject对象可以直接赋值到Map<String,Object>)
String json1 = "{'id':1,'name':'this is a testDemo','stus':[{'id':101,'name':'zhangsan','age':16},{'id':102,'name':'lisi','age':23}]}"; String json2 = "['北京','天津','杭州']"; //JSONObject jsonObject = JSONObject.fromObject(json2);//这里会报错net.sf.json.JSONException: A JSONObject text must begin with '{' at character 1 of ['北京','天津','杭州'] JSONObject jsonObject = JSONObject.fromObject(json1); System.out.println(jsonObject); //JSONObject 可以直接赋值给map集合 ----他们的格式都是一致的。需要注意的是Map中value的类型一般设置为Object 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("========="); }
4、将 对象 转换为JSONObject对象
String json1 = "{'id':1,'name':'this is a testDemo','students':[{'id':101,'name':'zhangsan','age':16},{'id':102,'name':'lisi','age':23}]}"; JSONObject jsonObject = JSONObject.fromObject(json1); Grade grade = new Grade(); grade.setId(jsonObject.getInt("id")); //这里的属性值可以从JSONObjec对象中根据key值取出响应的value值 grade.setName(jsonObject.getString("name")); ArrayList<Student> students = new ArrayList<>(); grade.setStudents(students); JSONArray stus = jsonObject.getJSONArray("students"); //这里的getJSONArray("key") 是从JSONObject对象中取出来了student数组部分的value值 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.getStudents().add(student); } System.out.println(grade);
补充:
JSONObject.put(key,value) 这里返回的结果是Map集合,如果key值为空的话,则会抛出异常 throw new IllegalArgumentException("key is null.");
5、JSONObject 和 JSONArray 的应用
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);
二、FastJson---阿里提供,效率最高(1.2.48以下的版本会有安全漏洞问题(不包括1.2.48))
1、依赖
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.56</version> </dependency>
2、导包
import com.alibaba.fastjson.JSON;
3、将JSON字符串转换为指定的对象,将JSON字符串(数组形式)转换为List集合
// 对象嵌套数组嵌套对象 String json1 = "{'id':1,'name':'JAVAEE-1703','stus':[{'id':101,'name':'lisi','age':16}]}"; // 数组 String json2 = "['北京','天津','杭州']"; //1、将Json字符串转换为指定的对象 Grade grade=JSON.parseObject(json1, Grade.class); System.out.println(grade); //2、将JSON(数组格式的)字符串转换为List<T>类型 --- json类型的字符串必须是[]格式,不能是花括号{} List<T> list=JSON.parseArray(json2, T.class); System.out.println(list);
4、将对象或者集合转换为JSON字符串
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);
三、GSON解析谷歌提供的
1、依赖
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.5</version> </dependency>
2、导包
3、将json字符串转换为JavaBean
// 对象嵌套数组嵌套对象 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);
4、将JavaBean转换为json字符串
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);
四、jackSon解析JSON,SpringMVC内置的解析器就是这个
1、依赖---spring-context集成了
Spring AOP:Spring的面向切面编程,提供AOP(面向切面编程)的实现
Spring Beans:Spring IOC的基础实现,包含访问配置文件、创建和管理bean等。
Spring Context:在基础IOC功能上提供扩展服务,此外还提供许多企业级服务的支持,有邮件服务、任务调度、JNDI定位,EJB集成、远程访问、缓存以及多种视图层框架的支持。
Spring Core:Spring的核心工具包
Spring expression:Spring表达式语言
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>版本号</version> </dependency>
2、导包
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper;
3、demo
// 对象嵌套数组嵌套对象 String json1 = "{\"id\":1,\"name\":\"JAVAEE-1703\",\"stus\":[{\"id\":101,\"name\":\"刘一\",\"age\":16}]}"; // 数组 String json2 = "[\"北京\",\"天津\",\"杭州\"]"; ObjectMapper mapper = new ObjectMapper(); Grade grade = mapper.readValue(json1, Grade.class); System.out.println(grade); List<String> list = mapper.readValue(json2, new TypeReference<List<String>>() { }); System.out.println(list);
4、demo
ArrayList<Student> students = new ArrayList<>(); for (int i = 0; i < 3; i++) { students.add(new Student(100 + i, "二稿" + i, 1000 + i)); } Grade grade = new Grade(22, "语文", students); //System.out.println(grade); ObjectMapper objectMapper = new ObjectMapper(); String s = objectMapper.writeValueAsString(grade); System.out.println(s);
参考于:https://www.cnblogs.com/wenqiangit/p/11575508.html