java中的json_JAVA中的四种JSON解析方式详解
JAVA中的四种JSON解析方式详解
我们在日常开发中少不了和JSON数据打交道,那么我们来看看JAVA中常用的JSON解析方式。
1、JSON官方 脱离框架使用
2、GSON
3、FastJSON 有问题
4、jackson 常用
JSON操作涉及到的类:
public class Student {
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Student(int id, String name, int age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
public Student() {
super();
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
public class Grade {
private int id;
private String name;
private ArrayList stus;
public Grade(int id, String name, ArrayList stus) {
super();
this.id = id;
this.name = name;
this.stus = stus;
}
public Grade() {
super();
}
@Override
public String toString() {
return "Grade [id=" + id + ", name=" + name + ", stus=" + stus + "]";
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public ArrayList getStus() {
return stus;
}
public void setStus(ArrayList stus) {
this.stus = stus;
}
}
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 map = jsonObject;
// for (Map.Entry 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 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 list=gson.fromJson(json2,
new TypeToken>(){}.getType());
System.out.println(list);
}
//生成
@Test
public void test2(){
ArrayList 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 list=JSON.parseArray(json2, String.class);
System.out.println(list);
}
//生成
@Test
public void test2(){
ArrayList 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);
}
}
jackSon解析JSON,SpringMVC内置的解析器就是这个
package cn.itcast.test;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.Test;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class jackSonTest {
@Test
public void test1() throws IOException {
// 对象嵌套数组嵌套对象
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 list = mapper.readValue(json2, new TypeReference>() {
});
System.out.println(list);
}
@Test
public void test2() throws JsonProcessingException {
ArrayList 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);
}
}
除了JSON官方的对类没有要求,剩下的都要求是标准的类,否则无法解析,因为都用到了反射。
java中的json_JAVA中的四种JSON解析方式详解相关推荐
- thinkphp四种url访问方式详解
url的4种访问方式 1.PATHINFO 模式 --重点 在后面使用非常多,如果想传多个参数可以使用键1/值1/键2/值2方法 代码如下: http://域名/项目名/入口文件/模块名/方法名/ ...
- 计算机曝光模式有哪些,摄影:单反相机中P、A、S、M四种曝光模式的用法详解 -电脑资料...
这篇教程是向脚本之家的朋友介绍单反相机中P.A.S.M四种曝光模式的用法,对于摄影爱好者非常值得学习,推荐到脚本之家,喜欢的朋友一起来看看吧 很多朋友在初接触单反相机时对相机的P.A.S.M四种曝光模 ...
- python可变参数_Python 的四种共享传参详解
点击上方"Python数据之道",选择"星标公众号" 精品文章,第一时间送达 作者 | 杨仁聪 编辑 | Lemon 出品 | Python数据之道 本文来自公 ...
- 集丰照明|LED五种调光方式详解(DALI/DMX/0-10V/PWM/可控硅)
LED五种调光方式详解 LED的发光原理同传统照明不同,同功率的 LED 光源,因其采用的芯片不同,电流电压参数则不同,故其内部布线结构和电路分布也不同,导致了各生产厂商的光源对调光驱动的要求也不尽相 ...
- IOS中四种json解析效率比较
作为一种轻量级的数据交换格式,json正在逐步取代xml,成为网络数据的通用格式. 有的json代码格式比较混乱,可以使用此"http://www.bejson.com/"网站来进 ...
- java 按钮 监听_Button的四种监听方式
Button按钮设置点击的四种监听方式 注:加粗放大的都是改变的代码 1.使用匿名内部类的形式进行设置 使用匿名内部类的形式,直接将需要设置的onClickListener接口对象初始化,内部的onC ...
- Java中的四种XML解析方式(一)
1. SAX解析 解析方式是事件驱动机制 ! SAX解析器, 逐行读取XML文件解析 , 每当解析到一个标签的开始/结束/内容/属性时,触发事件. 我们可以编写程序在这些事件发生时, 进行相应的处理. ...
- Burp Suite爆破模块中的四种模式的区别详解和演示(暴力破解)
BrupSuite爆破的四种模式详解 最近看了好多关于暴力破解的博客,其中用的最多的工具就是bp了,但是好多都是一上来给了执行步骤,却没有对爆破的这几个模式选择进行解释,所以今天萌新写个纪录,来阐明这 ...
- android 请求方式有哪些,Android中的几种网络请求方式详解
Android应用经常会和服务器端交互,这就需要手机客户端发送网络请求,下面整理四种常用网络请求方式. java.net包中的HttpURLConnection类 Get方式: // Get方式请求 ...
最新文章
- 数据库设计三大范式应用实例剖析(转载)
- python的读取纯文本文件的几种模式
- ManageEngine保护您的浏览器
- 树莓派 rtl8188eu 芯片wifi驱动
- 《轩辕传奇手游》主程序带你拆解MMORPG游戏客户端
- 【转】_declspec(naked) 使用
- 双一流大学毕业的我,应该何去何从?
- docker使用阿里云镜像仓库
- NUC1419 位操作【位运算+STL】
- Py之pyHook:pyHook库函数的简介、安装、使用方法之详细攻略
- 【LaTeX】对表格中的内容添加脚注不显示
- 电脑上有什么比较好用的屏幕录制软件
- 专访 | 快手王仲远:技术创业不要拿着锤子找钉子
- Google搜索规则——更准确的获取内容
- hu沪江计算机词汇,英文字母_计算机词汇(R-Z)_沪江英语
- spring配置详解
- jzoj 5970.【北大2019冬令营模拟12.1】space 莫比乌斯反演
- 双目视觉标定,矫正,深度图(Vs +OpenCV C++ Python实现)
- 山东大学软件学院网络攻击与防范2022-2023林丰波100词详解
- JOISC 2014 邮戳拉力赛(基础DP)
热门文章
- php如何做群聊功能,群聊php
- mysql怎么建组合索引_mysql索引及建立组合索引原则
- 关于 FastJson
- Routerboard/DR8072V01-wifi6-Qualcomm-IPQ8072A-4T4R-support-OpenWRT-802.11AX-supporting-10GE-port-10G
- react在线文件_在线教育大前端架构演进之路
- Java切割录音文件
- 全国首例!某度起诉“文库下载神器”,老惨了.....
- 解析电磁炉保护与检测电路工作原理
- mfc 直线的裁剪 Cohen-Sutherland裁剪算法
- oracle不足位数补零的实现sql语句