fastjson解析多层数据_JSON数据如何进行解析呢,方式有哪些?
问题:JSON数据如何进行解析呢,方式有哪些?
这个问题是我们作为程序员几乎每天都要进行的操作,那它有多少种方式呢,我们这里就这点来说一说。
解析的四种方式
- 官方解析
- 谷歌 Gson 解析
- 阿里巴巴 FastJson 解析
- Jackson 解析
案例实操
这里我们就只讨论对象与 json 如何互相转换。
这里我们先创建好 Maven 项目,方便引入依赖,通过单元测试来实际检验我们不同的解析方式。
下面我们都使用 User 对象,先创建好我们需要的类。
User.java
package org.example;public class User {private String name;private String sex;private Integer age;public User() {}public User(String name, String sex, Integer age) {this.name = name;this.sex = sex;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}@Overridepublic String toString() {return "User{" +"name='" + name + ''' +", sex='" + sex + ''' +", age=" + age +'}';}}
官方解析
官方提供的 json 解析方式,比较繁琐,所以用的人比较少。
第一步,引入依赖:
<!--json官方-->
<dependency><groupId>org.json</groupId><artifactId>json</artifactId><version>20160810</version>
</dependency>
第二步,编写测试代码:
package org.example;import org.json.JSONObject;
import org.springframework.stereotype.Component;/*** 官方解析*/
@Component
public class JsonTest1 {/*** 对象转json* @param user* @return*/public String userToJson(User user){JSONObject jsonObject = new JSONObject(user);String jsonStr = jsonObject.toString();return jsonStr;}/*** json转对象* @param json* @return*/public User userFromJson(String json){JSONObject jsonObject = new JSONObject(json);String name = jsonObject.getString("name");String sex = jsonObject.getString("sex");int age = jsonObject.getInt("age");User user = new User(name,sex,age);return user;}}
第三步,单元测试:
package org.example;import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:spring.xml")
public class JsonTest1Test {@Autowiredprivate JsonTest1 jsonTest1;@Testpublic void userToJson() {User user = new User("秦明", "man", 18);String json = jsonTest1.userToJson(user);System.out.println(json);}@Testpublic void userFromJson() {String json = "{"sex":"man","name":"秦明","age":18}";User user = jsonTest1.userFromJson(json);System.out.println(user);}
}
谷歌 Gson 解析
第一步,引入依赖:
<!--gson-->
<dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.8.5</version>
</dependency>
第二步,编写测试代码:
package org.example;import com.google.gson.Gson;
import org.springframework.stereotype.Component;/*** gson解析*/
@Component
public class JsonTest2 {/*** 对象转json* @param user* @return*/public String userToJson(User user){Gson gson = new Gson();String json = gson.toJson(user);return json;}/*** json转对象* @param json* @return*/public User userFromJson(String json){Gson gson = new Gson();User user = gson.fromJson(json, User.class);return user;}}
第三步,单元测试:同上(下面第三步和第四步和上面都一样,所以下面省略)
第四步,查看结果:同上
阿里巴巴 FastJson 解析
这个解析方式是由阿里巴巴开发出来的,效率最高,深受大家喜爱,功能强大,想要更深入学习的可以查看 FastJson 官网API。
第一步,引入依赖:
<!--fastjson-->
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.47</version>
</dependency>
第二步,编写测试代码:
package org.example;import com.alibaba.fastjson.JSONObject;
import org.springframework.stereotype.Component;/*** fastjson解析*/
@Component
public class JsonTest3 {/*** 对象转json* @param user* @return*/public String userToJson(User user){String json = JSONObject.toJSONString(user);return json;}/*** json转对象* @param json* @return*/public User userFromJson(String json){User user = JSONObject.parseObject(json,User.class);return user;}}
Jackson 解析
这个解析方式是在目前我们使用最流行的一些框架比如 SSM、SpringBoot,其内部的 json 解析使用的就是 Jackson,但往往我们会另外引入 FastJson 来使用,因为速度更快。
第一步,引入依赖:
<!--jackson-->
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.8</version>
</dependency>
第二步,编写测试代码:
package org.example;import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.stereotype.Component;import java.io.IOException;/*** jackson解析*/
@Component
public class JsonTest4 {/*** 对象转json* @param user* @return*/public String userToJson(User user) throws JsonProcessingException {ObjectMapper objectMapper = new ObjectMapper();String json = objectMapper.writeValueAsString(user);return json;}/*** json转对象* @param json* @return*/public User userFromJson(String json) throws IOException {ObjectMapper objectMapper = new ObjectMapper();User user = objectMapper.readValue(json, User.class);return user;}}
扩展~JSON的诞生
JSON 的诞生是因为 XML 整合到 HTML 中各个浏览器实现的细节不尽相同,所以道格拉斯·克罗克福特(Douglas Crockford)和 奇普·莫宁斯达(Chip Morningstar)一起从 JS 的数据类型中提取了一个子集,作为新的数据交换格式,因为主流的浏览器使用了通用的 JavaScript 引擎组件,所以在解析这种新数据格式时就不存在兼容性问题,于是他们将这种数据格式命名为 “JavaScript Object Notation”,缩写为 JSON,由此 JSON 便诞生了!
fastjson解析多层数据_JSON数据如何进行解析呢,方式有哪些?相关推荐
- java解析多层json,手把手教你怎么解析多层嵌套的JSON数据(使用JSONModel)
2018.11.14日更新 前言 没想到这篇简单介绍JSONModel的文章竟然已经破了两千阅读量,一跃成为我阅读量最高的文章,作为iOS小白的我感到万分惶恐 在这一个月的项目中,总是用到JSONMo ...
- go 怎么遍历json数据_json数据怎么处理 好难 啊!
之前爬了一些XX高考网站的一些高考数据,最近在处理数据的时候有一些小困惑,如图一这是我用爬虫爬下来的数据 重点是:我使用的是scrapy的 JsonLinesItemExporter 爬取的 就送一行 ...
- java解析多层嵌套json字符串
java解析多层嵌套json字符串 java分别解析下面两个json字符串 package jansonDemo;import com.alibaba.fastjson.JSON; import co ...
- fastjson解析多层数据_fastJson解析多层Json数据案例
这里咱们来实现一个获取接口数据存入数据库的案例html 例如数据:java { "code":200, "msg":"ok", ...
- gson解析mysql城市json数据_Gson解析复杂的json数据
首先我们需要定义一个序列化的Bean,这里采用内部类的形式,看起来会比较清晰一些: 1 public classJsonBean {2 publicString a;3 public Listb;4 ...
- 解析全国省市区Json数据
最近在使用项目中的区域表时,发现了有区域缺失的情况,于是找了个较新的省市区数据来解析更新到区域表中. 数据来源:https://blog.csdn.net/supergao222/article/de ...
- 深度学习数据特征提取:ICCV2019论文解析
深度学习数据特征提取:ICCV2019论文解析 Goal-Driven Sequential Data Abstraction 论文链接: http://openaccess.thecvf.com/c ...
- 十三、熵编码算法(4):H.264使用CAVLC解析宏块的残差数据
GitHub代码地址:点击这里 1. H.264的CAVLC解析宏块残差数据的流程 在H.264的解码器在解析宏块的残差数据时,其流程类似于上文提到的CAVLC编码的逆过程.在解析一个宏块残差的时候, ...
- Android中解析JSON形式的数据
转自:http://shazhuzhu1.iteye.com/blog/974758 1.JSON(JavaScript Object Notation) 定义: 一种轻量级的数据交换格式,具有良好的 ...
最新文章
- 使用Python和OpenCV构建图像金字塔
- 编程中new[]和delete[]应该如何使用?
- 从一次故障聊聊前端 UI 自动化测试
- 使用vlc播放m3u8网络视频教程
- mysql多列索引不全用,MySQL多列索引的生效规则
- python小程序-10个Python练手小程序,学习python的很好的资料
- 【控制】《鲁棒控制》-周克敏老师
- 理解Python的迭代器
- Ubuntu识别USB设备
- 蓝桥杯第八届省赛JAVA真题----油漆面积
- 面向数据科学的概率论 一、基础
- 使expect脚本传回返回值
- A Bit of Fun
- Android星座查询实验报告,数字基带传输实验实验报告
- 使用文件流的方式将 DataTable 导入到 Excel 中
- 很不错的在线Office控件:IWebOffice与SOAOffice
- java 四级联动_使用js实现四级联动
- Windows下搭建wnmp
- Python中可迭代对象是什么?
- Qlik之创建任务调度(五)