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解析方式详解相关推荐

  1. thinkphp四种url访问方式详解

    url的4种访问方式   1.PATHINFO 模式 --重点 在后面使用非常多,如果想传多个参数可以使用键1/值1/键2/值2方法 代码如下: http://域名/项目名/入口文件/模块名/方法名/ ...

  2. 计算机曝光模式有哪些,摄影:单反相机中P、A、S、M四种曝光模式的用法详解 -电脑资料...

    这篇教程是向脚本之家的朋友介绍单反相机中P.A.S.M四种曝光模式的用法,对于摄影爱好者非常值得学习,推荐到脚本之家,喜欢的朋友一起来看看吧 很多朋友在初接触单反相机时对相机的P.A.S.M四种曝光模 ...

  3. python可变参数_Python 的四种共享传参详解

    点击上方"Python数据之道",选择"星标公众号" 精品文章,第一时间送达 作者 | 杨仁聪 编辑 | Lemon 出品 | Python数据之道 本文来自公 ...

  4. 集丰照明|LED五种调光方式详解(DALI/DMX/0-10V/PWM/可控硅)

    LED五种调光方式详解 LED的发光原理同传统照明不同,同功率的 LED 光源,因其采用的芯片不同,电流电压参数则不同,故其内部布线结构和电路分布也不同,导致了各生产厂商的光源对调光驱动的要求也不尽相 ...

  5. IOS中四种json解析效率比较

    作为一种轻量级的数据交换格式,json正在逐步取代xml,成为网络数据的通用格式. 有的json代码格式比较混乱,可以使用此"http://www.bejson.com/"网站来进 ...

  6. java 按钮 监听_Button的四种监听方式

    Button按钮设置点击的四种监听方式 注:加粗放大的都是改变的代码 1.使用匿名内部类的形式进行设置 使用匿名内部类的形式,直接将需要设置的onClickListener接口对象初始化,内部的onC ...

  7. Java中的四种XML解析方式(一)

    1. SAX解析 解析方式是事件驱动机制 ! SAX解析器, 逐行读取XML文件解析 , 每当解析到一个标签的开始/结束/内容/属性时,触发事件. 我们可以编写程序在这些事件发生时, 进行相应的处理. ...

  8. Burp Suite爆破模块中的四种模式的区别详解和演示(暴力破解)

    BrupSuite爆破的四种模式详解 最近看了好多关于暴力破解的博客,其中用的最多的工具就是bp了,但是好多都是一上来给了执行步骤,却没有对爆破的这几个模式选择进行解释,所以今天萌新写个纪录,来阐明这 ...

  9. android 请求方式有哪些,Android中的几种网络请求方式详解

    Android应用经常会和服务器端交互,这就需要手机客户端发送网络请求,下面整理四种常用网络请求方式. java.net包中的HttpURLConnection类 Get方式: // Get方式请求 ...

最新文章

  1. 数据库设计三大范式应用实例剖析(转载)
  2. python的读取纯文本文件的几种模式
  3. ManageEngine保护您的浏览器
  4. 树莓派 rtl8188eu 芯片wifi驱动
  5. 《轩辕传奇手游》主程序带你拆解MMORPG游戏客户端
  6. 【转】_declspec(naked) 使用
  7. 双一流大学毕业的我,应该何去何从?
  8. docker使用阿里云镜像仓库
  9. NUC1419 位操作【位运算+STL】
  10. Py之pyHook:pyHook库函数的简介、安装、使用方法之详细攻略
  11. 【LaTeX】对表格中的内容添加脚注不显示
  12. 电脑上有什么比较好用的屏幕录制软件
  13. 专访 | 快手王仲远:技术创业不要拿着锤子找钉子
  14. Google搜索规则——更准确的获取内容
  15. hu沪江计算机词汇,英文字母_计算机词汇(R-Z)_沪江英语
  16. spring配置详解
  17. jzoj 5970.【北大2019冬令营模拟12.1】space 莫比乌斯反演
  18. 双目视觉标定,矫正,深度图(Vs +OpenCV C++ Python实现)
  19. 山东大学软件学院网络攻击与防范2022-2023林丰波100词详解
  20. JOISC 2014 邮戳拉力赛(基础DP)

热门文章

  1. php如何做群聊功能,群聊php
  2. mysql怎么建组合索引_mysql索引及建立组合索引原则
  3. 关于 FastJson
  4. Routerboard/DR8072V01-wifi6-Qualcomm-IPQ8072A-4T4R-support-OpenWRT-802.11AX-supporting-10GE-port-10G
  5. react在线文件_在线教育大前端架构演进之路
  6. Java切割录音文件
  7. 全国首例!某度起诉“文库下载神器”,老惨了.....
  8. 解析电磁炉保护与检测电路工作原理
  9. mfc 直线的裁剪 Cohen-Sutherland裁剪算法
  10. oracle不足位数补零的实现sql语句