当前位置: 首页 > news >正文

【Java干货教程】JSON,JSONObject,JSONArray类详解

一、定义

JSON:就是一种轻量级的数据交换格式,被广泛应用于WEB应用程序开发。JSON的简洁和清晰的层次结构,易于阅读和编写;同时也易于机器解析和生成,有效的提升网络传输效率;支持多种语言,很多流行的语言都对JSON格式有着很友好的支持。

  • JSON对象:就是多个属性被{}括起来的。
  • JSON数组:就是包含了多个JSON对象的一个集合,数组是以数组括号[]括起来的。JSON数组并不一定是要相同的JSON对象的集合,也可以是不同的对象。

JSON、JSON对象、JSON数组的区别 

  • JSON是一种数据结构,类型xml;
  • JSON对象则是对JSON的具体体现;JSON数组则是将多个JSON对象进行存储的一个集合。

这里以fastjson2来进行讲解,不同的jar包对JSON相关的处理有着不同的实现方式,但是大部分方法也都是相同的。

二、fastjson2

2.1、fastjson2简介

fastjson2 是 FASTJSON 项目的重要升级,目标是为下一个十年提供一个高性能的JSON库, fastjson2 性能相比原先旧的 fastjson 有了很大提升,并且 fastjson2 更安全,完全删除autoType白名单,提升了安全性。

中文文档: 

​​​​https://github.com/alibaba/fastjson2/blob/main/README.md

下面是一些常用的方法 

2.2、导入fastjson2依赖

maven如下:pom(本文所有代码仅使用这一个依赖即可):

    <dependencies><dependency><groupId>com.alibaba.fastjson2</groupId><artifactId>fastjson2</artifactId><version>2.0.26</version></dependency></dependencies>

需要注意的一点是在使用 fastjson2 时导入的包名是 com.alibaba.fastjson2 ,就像下面这样:

import com.alibaba.fastjson2.JSON;

import com.alibaba.fastjson2.JSONObject;

import com.alibaba.fastjson2.JSONArray;

2.3、json对象与json数组的创建

2.3.1、json对象创建

import com.alibaba.fastjson2.JSONObject;public class Demo {public static void main(String[] args) {JSONObject info = new JSONObject();info.put("name", "张三");info.put("age", "18");info.put("地理", "70");info.put("英语", "60");System.out.println(info);}
}

2.3.2、json数组创建

import com.alibaba.fastjson2.JSONArray;public class Demo {public static void main(String[] args) {JSONArray array = new JSONArray();array.add("1班");array.add("2班");array.add("3班");System.out.println(array);}
}

2.3.2、json对象添加到json数组

import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;public class Demo {public static void main(String[] args) {JSONObject info1 = new JSONObject();info1.put("name", "张三");info1.put("age", "18");JSONObject info2 = new JSONObject();info2.put("name", "李四");info2.put("age", "19");//把上面创建的两个json对象加入到json数组里JSONArray array = new JSONArray();array.add(info1);array.add(info2);System.out.println(array);}
}

2.4、json对象取值与json数组遍历取值

2.4.1、json对象取值

import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;public class Demo {public static void main(String[] args) {JSONArray array = new JSONArray();array.add("1班");array.add("2班");array.add("3班");JSONObject school = new JSONObject();school.put("schoolName", "第一中学");school.put("teacher", "刘梅");JSONObject info = new JSONObject();info.put("name", "张三");info.put("age", "18");info.put("gradle", array);info.put("schoolInfo", school);//从info中取值System.out.println(info.getString("name")); //张三System.out.println(info.getIntValue("age"));//18System.out.println(info.getJSONArray("gradle"));//["1班","2班","3班"]System.out.println(info.getJSONObject("schoolInfo"));//{"schoolName":"第一中学","teacher":"刘梅"}}
}

2.4.2、json数组遍历取值 

import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;public class Demo {public static void main(String[] args) {JSONObject info1 = new JSONObject();info1.put("name", "张三");info1.put("age", "18");JSONObject info2 = new JSONObject();info2.put("name", "李四");info2.put("age", "19");JSONArray array = new JSONArray();array.add(info1);array.add(info2);//遍历获取json数组中对象的值for (int i = 0; i < array.size(); i++) {JSONObject json = array.getJSONObject(i);System.out.println(json.getString("name"));System.out.println(json.getString("age"));}}
}

2.5、json对象与字符串的转换 

2.5.1、json对象与字符串的转换

import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;public class Demo {public static void main(String[] args) {JSONObject info = new JSONObject();info.put("name", "张三");info.put("age", "18");info.put("地理", "70");info.put("英语", "60");//JSON对象转字符串String str = JSON.toJSONString(info);System.out.println(str);//JSON字符串转JSON对象JSONObject json = JSONObject.parseObject(str);System.out.println(json);}
}

2.5.2、json字符串的字节数组转json对象

import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;public class Demo {public static void main(String[] args) {String str = "{\"name\":\"张三\",\"age\":\"18\",\"地理\":\"70\",\"英语\":\"60\"}";byte[] bytes = str.getBytes();JSONObject data = JSON.parseObject(bytes);System.out.println(data);}
}

2.6、json数组与字符串的转换

import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;public class Demo {public static void main(String[] args) {String text = "[\"张三\",\"李四\",\"王五\"]";System.out.println(text);//json字符串转json数组JSONArray data = JSON.parseArray(text);//json数组转json字符串String str = JSONArray.toJSONString(data);System.out.println(data);System.out.println(str);}
}

2.7、json字符串转java对象的转换 

Student类如下:

public class Student {public String name;public int age;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(String name, int age) {this.name = name;this.age = age;}
}

2.7.1、json字符串转java对象的转换

import com.alibaba.fastjson2.JSON;public class Demo {public static void main(String[] args) {Student student = new Student("张三", 18);//Student对象转JSON字符串String studentStr = JSON.toJSONString(student);//JSON字符串转Student对象Student data = JSON.parseObject(studentStr, Student.class);System.out.println(studentStr);}
}

2.7.2、java对象转byte数组转换 

import com.alibaba.fastjson2.JSON;public class Demo {public static void main(String[] args) {Student student = new Student("张三", 18);//Student对象转字节数组byte[] text = JSON.toJSONBytes(student);//字节数组转Student对象Student data = JSON.parseObject(text, Student.class);System.out.println(data.getName() + data.getAge());}
}

2.8、json字符串与Map转换 

2.8.1、json字符串转Map

@Testpublic void test05(){String str = "{\n" +"\"gradle\":\"高一\",\n" +"\"number\":\"2\",\n" +"\"people\":[{\"name\":\"张三\",\"age\":\"15\",\"phone\":\"123456\"},\n" +"         {\"name\":\"李四\",\"age\":\"16\",\"phone\":\"78945\"}]\n" +"}";Map<String, Object> map1 = JSONObject.parseObject(str, new TypeReference<Map<String, Object>>() {});Map map2 = JSON.parseObject(str, Map.class);System.out.println(map1);System.out.println(map2);}

2.8.2、Map转json字符串

(注意:如果直接使用JSON.toJSONString(map)转换,因为"测试1"的值为null,转换的结果就会是 {“测试2”:“hello”})

import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONWriter;import java.util.HashMap;
import java.util.Map;public class Demo {public static void main(String[] args) {Map<String, String> map = new HashMap<>();map.put("测试1", null);map.put("测试2", "hello");//{"测试2":"hello","测试1":null}String str = JSON.toJSONString(map, JSONWriter.Feature.WriteMapNullValue);System.out.println(str);}
}

如果你使用的是老的fastjson1(下述是简单示例,不可使用),可以像下面这样转换:

Map<String, String> map = new HashMap<>();
map.put("测试1", null);
map.put("测试2", "hello");
String str = JSON.toJSONString(map, SerializerFeature.WriteMapNullValue) ;

2.9、json数组转List

import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;import java.util.List;
import java.util.Map;public class Demo {public static void main(String[] args) {String str = "{\n" +"\"gradle\":\"高一\",\n" +"\"number\":\"2\",\n" +"\"people\":[{\"name\":\"张三\",\"age\":\"15\",\"phone\":\"123456\"},\n" +"         {\"name\":\"李四\",\"age\":\"16\",\"phone\":\"78945\"}]\n" +"}";JSONObject strJson = JSONObject.parseObject(str);//获取people数组JSONArray people = strJson.getJSONArray("people");//json数组转ListList<Map> list = people.toJavaList(Map.class);System.out.println(str);}
}

如果你使用的是老的fastjson1,可以像下面这样转换:    

String str = "{\n" +"\"gradle\":\"高一\",\n" +"\"number\":\"2\",\n" +"\"people\":[{\"name\":\"张三\",\"age\":\"15\",\"phone\":\"123456\"},\n" +"         {\"name\":\"李四\",\"age\":\"16\",\"phone\":\"78945\"}]\n" +"}";JSONObject strJson = JSONObject.parseObject(str);//字符串转json对象
String people = String.valueOf(strJson.getJSONArray("people"));
List<Map<String, String>> list = (List<Map<String, String>>) JSONArray.parse(people);

 

参考文章:JSONObject详解(com.alibaba)-fastjson2_com.alibaba.fastjson2-CSDN博客

相关文章:

【Java干货教程】JSON,JSONObject,JSONArray类详解

一、定义 JSON&#xff1a;就是一种轻量级的数据交换格式&#xff0c;被广泛应用于WEB应用程序开发。JSON的简洁和清晰的层次结构&#xff0c;易于阅读和编写&#xff1b;同时也易于机器解析和生成&#xff0c;有效的提升网络传输效率&#xff1b;支持多种语言&#xff0c;很多…...

2023年高级软考系统架构师考题参考

对于一些有实践经验的同学来说&#xff0c;感觉不难&#xff0c;但是落笔到纸面上&#xff0c;就差强人意了&#xff0c;平时这方面要多练习&#xff0c;所想所思要落到纸面上&#xff0c;或者表达清晰让别人听懂&#xff0c;不仅是工作中的一个基本素质&#xff0c;也是个非常…...

【c语言】飞机大战(1)

提前准备好游戏要的素材&#xff0c;可以到爱给网去找&#xff0c;飞机大战我们需要的是一个我方战机图片&#xff0c;一个背景图&#xff0c;三个敌方战机的图&#xff0c;我方战机的图片&#xff0c;敌方战机的图片&#xff0c;并且将图片和.cpp放在同一文件夹下. 这里创建.…...

关于 K8s 的一些基础概念整理

〇、前言 Kubernetes&#xff0c;将中间八个字母用数字 8 替换掉简称 k8s&#xff0c;是一个开源的容器集群管理系统&#xff0c;由谷歌开发并维护。它为跨主机的容器化应用提供资源调度、服务发现、高可用管理和弹性伸缩等功能。 下面简单列一下 k8s 的几个特性&#xff1a; 自…...

Node.js-fs、path、http模块

1.初识Node.js 1.1 什么是Node.js 1.2 Node.js中的JavaScript运行环境 1.3 Node.js可以做什么 Node.js 作为一个JavaScript 的运行环境&#xff0c;仅仅提供了基础的功能和 AP1。然而&#xff0c;基于 ode.s 提供的这些基础能&#xff0c;很多强大的工具和框架如雨后春笋&…...

CentOS 安装WebLogic

1.JDK 安装 cd /home/ mkdir java cd java/ tar -zxvf jdk-8u321-linux-x64.tar.gzvim /etc/profile添加以下内容到 /etc/profile JAVA_HOME/home/java/jdk1.8.0_321 CLASSPATH.:$JAVA_HOME/lib.tools.jar PATH$JAVA_HOME/bin:$PATH export JAVA_HOME CLASSPATH PATH刷新配置…...

Linux命令的操作练习

1.创建ss别名&#xff0c;查看长格式详细信息 alias ssls -l 2.创建ss别名&#xff0c;复制boot文件夹下的内容到data文件夹下 alias sscp -r /boot /data 3.删除别名ss unalias ss 4. 复制test文件夹下的passwd文件到qq文件夹下&#xff0c;并改名为ww cp test/pas…...

杰发科技AC7840——EEPROM初探

0.序 7840和7801的模拟EEPROM使用不太一样 1.现象 按照官方Demo&#xff0c;在这样的配置下&#xff0c;我们看到存储是这样的&#xff08;连续三个数字1 2 3&#xff09;。 使用串口工具的多帧发送功能 看不出多少规律 修改代码后 发现如下规律&#xff1a; 前四个字节是…...

WPF 基础入门(简介)

简介 WPF&#xff08;Windows Presentation Foundation&#xff09;是微软推出的基于Windows 的用户界面框架&#xff0c;属于.NET Framework 3.0的一部分。它提供了统一的编程模型、语言和框架&#xff0c;真正做到了分离界面设计人员与开发人员的工作&#xff1b;同时它提供了…...

【Unity动画系统】Animator有限状态机参数详解

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…...

php获取访客IP、UA、操作系统、浏览器等信息

最近有个需求就是获取下本地的ip地址、网上搜索了相关的教程&#xff0c;总结一下分享给大家、有需要的小伙伴可以参考一下 一、简单的获取 User Agent 信息代码: echo $_SERVER[HTTP_USER_AGENT]; 二、获取访客操作系统信息: /** * 获取客户端操作系统信息,包括win10 * pa…...

基于huffman编解码的图像压缩算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 Huffman编码算法步骤 4.2 Huffman编码的数学原理 4.3 基于Huffman编解码的图像压缩 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ..…...

python+django网上购物商城系统o9m4k

语言&#xff1a;Python 框架&#xff1a;django/flask可以定制 软件版本&#xff1a;python3.7.7 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat 开发工具pycharm/vscode都可以 前端框架:vue.js 系统使用过程主要涉及到管理员和用户两种角色&#xff0c;主要包含个…...

面试题-性能优化

前端项目优化&#xff1a; 一般考虑方面: (挑几点记住) 我们学的: 懒加载: 路由、图片懒加载 骨架屏的使用 压缩文件&#xff1a;可以使用压缩工具&#xff08;如GZIP&#xff09;对页面文件进行压缩&#xff0c;减小文件大小&#xff0c;提高页面加载速度。 减少HTTP请求&a…...

自身文档管理规范

之前在 这里 叙述了 用 sphinx 生成静态网站&#xff0c; 并利用 静态网络托管服务 readthedocs 现在我们有了新的需求&#xff0c;想知道这些东西到底是什么。 过程 过程A &#xff1a; markdown/rst -> html mkdocs sphinx相关&#xff1a; pandoc(不能生成整个网站的h…...

php学习05-常量

常量可以理解为值不变的量。常量值被定义后&#xff0c;在脚本的其他任何地方都不能改变。一个常量由英文字母、下划线和数字组成&#xff0c;但数字不能作为首字母出现。 在PHP中使用define()函数来定义常量&#xff0c;该函数的语法格式如下&#xff1a; define(string cons…...

MFC:如何将JPEG等图片显示到对话框客户区

步骤: 0、打开VS2022创建一个基于对话框的MFC应用&#xff0c;项目名称命名为PicShow&#xff0c;创建完成后将对话框客户区中的"确定"按钮等内容删除&#xff08;具体步骤略&#xff09;。 1、建立菜单栏&#xff1a;文件->打开、退出。具体步骤&#x…...

MIUI解BL锁+刷系统教程

解除BL锁 打开设置找到My device->Detailed info and specs->连点5下MIUI version(进入开发者模式)重新打开设置找到Additional settings->Developer opentions->Mi lock status->Add account and device下载官方解锁工具包&#xff08;miflash_unlock&#xf…...

数据结构和算法笔记3:双指针法(快慢指针)

双指针法&#xff08;快慢指针法&#xff09;在数组、字符串和链表的操作中是非常常见的&#xff0c;这里结合力扣上的题进行可一下梳理&#xff0c;主要的思路是我们要明确快指针指的是什么&#xff0c;慢指针指的是什么。 1. 移除元素类问题 27. 移除元素 要我们移除目标元…...

股票价格预测 | Python实现Autoformer, FEDformer和PatchTST等模型用于股价预测

文章目录 效果一览文章概述环境描述源码设计效果一览 文章概述 Autoformer、FEDformer和PatchTST是一些用于时间序列预测,包括股价预测的模型。它们都是在Transformer模型的基础上进行了改进和扩展,以更好地适应时间序列数据的特点。 Autoformer:Autoformer是一种自适应Tran…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列&#xff0c;以便知晓哪些列包含有价值的数据&#xff0c;…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...