又到了周末整理季,其实这周学了很多东西,但是还未动手实践,所以就拿部分学到的进行整理。话不多说,上第一个知识点: 肯定很多人都会心里回答,一种数据交换格式,没毛病, 简单说了一下JSON的概述,下面摆上这篇文章的重点:Java中JSON的解析。 官方提供的JSON具有通用性,就是解析时有点费事。反正我不用,哈哈。 生成JSON对象 结果: JavaBean TO JSON: 解析JSON 依赖 生成JSON对象: 解析JSON 不用get取值,set赋值了,看起来好爽啊。有没有? FastJSON是阿里巴巴的产品,效率最高,深受广大程序员的喜爱,哈哈。但这里有很多东西我这里只写一下上面的老套路,生成和解析。想更多了解的可以去看这个FastJson。超赞的。 生成JSON对象: 解析JSON JSON 对象与字符串的相互转化 jackSon解析JSON,SpringMVC内置的解析器就是这个 生成JSON字符串 解析JSON字符串 如果你不知道JSON对象是啥玩意:JSON
。什么是JSON?
JSON就是一种轻量级的数据交换格式,与开发语言无关。
JSON的数据结构呢?
对象(object):一个对象包含一系列非排序的键/值对
,一个对象以 {
开始,并以 }
结束。每个键/值对之间使用 :
分区。多个键值对之间通过 ,
分割。需要注意的是JSON 的键是一个 String
类型的字符串。
JSON 值的格式呢?
值(value):可以是双引号括起来的字符串(string)
、数值(number)
、true
、false
、 null
、对象(object)
或者数组(array)
。这些结构可以嵌套使用。JSON在java中的使用
Java中并没有内置JSON的解析,因此使用JSON需要借助第三方类库。经过总结,一共4种方式,下面围绕每种方式生成和解析进行阐述:
1.JSON官方
2.GSON
:谷歌开发的 JSON 库,功能十分全面。
3.FastJSON
:阿里巴巴开发的 JSON 库,性能十分优秀。
4.Jaskon
:社区十分活跃且更新速度很快。1.使用JSON官方提供的JSON
maven依赖:<dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20180130</version> </dependency>
1.使用JSONObject添加对象
代码: @Test public void Test3(){ //创建JSON对象 JSONObject jsonObject = new JSONObject(); Object obj = null; //像JSON对象中添加数据 jsonObject.put("name", "张三"); jsonObject.put("age", 20); jsonObject.put("birth", "1998-01-01"); jsonObject.put("haveCar", obj); jsonObject.put("hasGirlfriend", true); jsonObject.put("likes", new String[]{"看电影", "看书"}); //将JSON对象以字符串的形式打印 System.out.println(jsonObject.toString()); }
在字符串输出的时候会发现,输出的字符串与数据存储的顺序可能是不一致的。原因是调用jsonObject.put()
方法的时候,其底层是一个 HashMap
,数据被存到了HashMap
中。 HashMap
根据键的哈希码来决定键的位置,所以可能会出现上面的问题。
既然jsonObject.put()
方法的底层是对 HashMap
的操作,那么能否将一个 HashMap
转换成 JSON
数据呢?答案是可以的。原因是JSONObject
类提供了一个构造函数,这个构造函数中接收的正是一个Map
。
2.javaBean转JSON
javaBean:public class User { private String name; private int age; private String[] likes; // 省略 get 与 set 方法 }
public static void beanToJsonTest() { User user = new User(); user.setName("张三"); user.setAge(20); user.setLikes(new String[]{"看电影", "看书"}); JSONObject jsonObject = new JSONObject(user); System.out.println(jsonObject.toString()); }
首先有两张表,分别是学生表和年级表,年纪和学生是一对多关系,这里我就不展示表了,太简单了。直接上解析代码:(不懂一定要看注释哦!)//JSON字符串 String json = "{'id':1,'name':'JAVAEE-1703','stus':[{'id':101,'name':'刘一','age':16},{'id':102,'name':'刘二','age':23}]}"; //将JSON字符串转为JSON对象 JSONObject jsonObject = JSONObject.fromObject(json); //创建年级对象,然后进行解析JSON,并赋值 Grade grade = new Grade(); grade.setId(jsonObject.getInt("id")); grade.setName(jsonObject.getString("name")); //创建一个集合用来存储学生对象 ArrayList<Student> students = new ArrayList<>(); JSONArray stus = jsonObject.getJSONArray("stus"); //遍历JSONArray对象,解析后放入集合中 for (Object o : stus) { JSONObject jsonObject1 = JSONObject.fromObject(o); Student student = new Student(jsonObject1.getInt("id"),jsonObject1.getString("name"), jsonObject1.getInt("age")); students.add(student); } grade.setStus(students) ; //至此一个JSON字符串解析为Java对象
2.使用GSON
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.2</version> </dependency>
public static void beanToJsonTest() { User user = new User(); user.setName("张三"); user.setAge(20); user.setLike(new String[]{"看电影", "看书"}); /** * 使用GsonBuilder 可以作一些额外处理,比如格式化输出,预处理等 * * GsonBuilder gsonBuilder = new GsonBuilder(); * gsonBuilder.setPrettyPrinting(); * Gson gson = gsonBuilder.create(); */ Gson gson = new Gson(); System.out.println(gson.toJson(user)); }
public static void jsonToBeanTest() { String jsonStr = "{"name":"李四","age":22 , "like":["看电影","看书"],"birth":"1996-01-01"}"; GsonBuilder gsonBuilder = new GsonBuilder(); // 设置日期转换格式 gsonBuilder.setDateFormat("yyyy-MM--dd"); Gson gson = gsonBuilder.create(); //解析对象:第一个参数:待解析的字符串 第二个参数结果数据类型的Class对象 User user = gson.fromJson(jsonStr, User.class); }
String json2 = "['北京','天津','杭州']"; //解析数组要求使用Type ArrayList<String> list=gson.fromJson(json2, new TypeToken<ArrayList<String>>(){}.getType()); System.out.println(list);
3.使用FastJSON
依赖<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.47</version> </dependency>
创建JSON 对象非常简单,只需使用 JSONObject(fastJson提供的json对象) 和 JSONArray(fastJson提供json数组对象) 对象即可。@Test public void whenGenerateJson_thanGenerationCorrect() throws ParseException { JSONArray jsonArray = new JSONArray(); for (int i = 0; i < 2; i++) { JSONObject jsonObject = new JSONObject(); jsonObject.put("AGE", 10); jsonObject.put("FULL NAME", "Doe " + i); jsonObject.put("DATE OF BIRTH", "2016/12/12 12:12:12"); jsonArray.add(jsonObject); } String jsonOutput = jsonArray.toJSONString(); }
@Test public void whenJson_thanConvertToObjectCorrect() { Person person = new Person(20, "John", "Doe", new Date()); String jsonObject = JSON.toJSONString(person); Person newPerson = JSON.parseObject(jsonObject, Person.class);
最常用的就是这个直接转化了,来吧://从字符串解析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);
4.使用JackSon
依赖<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.8</version> </dependency>
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); ObjectMapper objectMapper = new ObjectMapper(); String s = objectMapper.writeValueAsString(grade); System.out.println(s);
// 对象嵌套数组嵌套对象 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, newTypeReference<List<String>>() {}); System.out.println(list);
看这篇文章啦:JsonElement简单说明
一口气整理下来,好累哦,下面感谢以下文章的博主,并奉上链接:
1.https://blog.csdn.net/codejas/article/details/80419763
2.https://www.cnblogs.com/wenqiangit/p/11575508.html
3.还有菜鸟教程:https://www.runoob.com/w3cnote/java-json-instro.html
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算