Java解析使用JSON的多种方法
投稿:yin
XML的特点是功能全面,但标签繁琐,格式复杂。在Web上使用XML现在越来越少,取而代之的是JSON这种数据结构。JSON是JavaScript Object Notation的缩写,它去除了所有JavaScript执行代码,只保留JavaScript的对象格式。
开发Web应用的时候,使用JSON作为数据传输,在浏览器端非常方便。因为JSON天生适合JavaScript处理,所以,绝大多数REST API都选择JSON作为数据传输格式。现在问题来了:使用Java如何对JSON进行读写?
JSON优缺点介绍
JSON是一种轻量级的数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于阅读和编写,同时也易于解析和生成,可以在多种语言之间进行数据交换,并有效地提升网络传输效率,同时也易于机器解析和生成。它是基于ECMAScript的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯。
优点:
1、数据格式比较简单,易于编程人员阅读和编写,同时也易于计算机生成和解析。
2、支持多种语言,包括ActionScript,C,C#,ColdFusion,Java,JavaScript,Perl,PHP,Python,Ruby等语言服务器端语言,便于服务器端的解析。
3、因为JSON格式能够直接被服务器端代码使用,大大简化了服务器端和客户端的代码开发量,但是完成的任务不变,且易于维护。
缺点:
1、语法严谨,必须符合JSON语法规则。
2、要求字符集必须是Unicode,约束性强。
类库选择
在Java中,并没有内置JSON的解析,针对JSON也有标准的JSR 353 API,但是我们在前面讲XML的时候发现,如果能直接在XML和JavaBean之间互相转换是最好的。类似的,如果能直接在JSON和JavaBean之间转换,那么用起来就简单多了。
因此使用JSON需要借助第三方类库。下面是几个常用的 JSON 解析类库:
类型 | 特点 |
传统JSON方式 | 复杂的Json数据转换成实体类存在缺陷,性能和功能不够完善 |
Jackson方式 | 复杂的Json数据转换成实体类存在缺陷,性能和功能优于传统方式 |
Gson方式 | 功能方面在几种方式中最优,性能方面不如Jackson方式 |
FastJson方式 | 复杂的实体类转换成Json数据存在缺陷,解析json的速度优于其他方式 |
FastJson教程讲解
环境配置
在 Maven 构建的项目中,在 pom.xml 文件中加入以下依赖即可。
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.47</version> </dependency>
编码
从 Java 变量到 JSON 格式的编码过程如下:
实例
public void testJson() { JSONObject object = new JSONObject(); //string object.put("string","string"); //int object.put("int",2); //boolean object.put("boolean",true); //array List<Integer> 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,2,3],"int":2}
解码
从 JSON 对象到 Java 变量的解码过程如下:
实例
public void testJson2() { JSONObject object = JSONObject .parseObject("{\"boolean\":true,\"string\":\"string\",\"list\":[1,2,3],\"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<Integer> integers = JSON.parseArray(object.getJSONArray("list").toJSONString(),Integer.class); integers.forEach(System.out::println); //null System.out.println(object.getString("null")); }
在上例中,首先从 JSON 格式的字符串中构造一个 JSON 对象,之后依次读取字符串、整数、布尔值以及数组,最后分别打印,打印结果如下:
string 2 true 1 2 3 null
JSON 对象与字符串的相互转化
方法 | 作用 |
---|---|
JSON.parseObject() | 从字符串解析 JSON 对象 |
JSON.parseArray() | 从字符串解析 JSON 数组 |
JSON.toJSONString(obj/array) | 将 JSON 对象或 JSON 数组转化为字符串 |
实例
//从字符串解析JSON对象 JSONObject obj = JSON.parseObject("{\"jb51\":\"脚本之家\"}"); //从字符串解析JSON数组 JSONArray arr = JSON.parseArray("[\"脚本之家\",\"JB51\"]\n"); //将JSON对象转化为字符串 String objStr = JSON.toJSONString(obj); //将JSON数组转化为字符串 String arrStr = JSON.toJSONString(arr);
到此这篇关于Java解析使用JSON的多种方法的文章就介绍到这了,更多相关Java解析JSON内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!