Java 处理JSON 数据小结

news2025/1/18 6:29:50

Java 处理 JSON 数据小结

JSON的格式类型

JSON有三种格式类型:基本类型、数组类型、对象嵌套

基本类型

格式说明:{“键” : 值, “键” : “值”,…},以大括号开始,键的名称加上冒号,然后跟上对应的的值,若有其他键值对则以逗号进行分割。

{
    "student": "张三",
    "age": 18,
    "sex": true
}

数组类型

格式说明:[{“键” : 值, “键” : “值”},{“键” : 值, “键” : “值”},…],以中括号开始,其间的数据通过逗号进行分割。

[
    {
        "name": "张三",
        "age": 18,
        "sex": true
    },
    {
        "name": "李四",
        "age": 19,
        "sex": false
    }
]

对象嵌套

由上面两种类型,因为值的不固定性,可以演变出各种各样的嵌套类型。

{
    "name": "teacher",
    "computer": {
    "CPU":"intel7,
    "disk": "512G"
	},
	"students": [
        {
            "name": "张三",
            "age": 18,
            "sex": true
        },
        {
            "name": "李四",
            "age": 19,
            "sex": false
        }
    ]
}

JSON官网介绍可以参考。

使用 com.alibaba.fastjson 转换、解析json数据

POM引入依赖

		<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.68</version>
       </dependency>

使用不同对象处理不同类型的JSON数据。
在这里插入图片描述

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
public class TestJson {
    public static void main(String[] args) {
        // json字符串-简单对象型
        final String JSON_OBJ_STR = "{\"studentName\":\"lily\",\"studentAge\":12}";
        // json字符串-数组类型
        final String JSON_ARRAY_STR = "[{\"studentName\":\"lily\",\"studentAge\":12},{\"studentName\":\"lucy\",\"studentAge\":15}]";

        JSONStrToJSONArray1(JSON_ARRAY_STR);
        JSONStrToJSONObject(JSON_OBJ_STR);
    }

    /**
     * 字符串(json数组类型格式)转换成JSONArray类型的json
     */
    public static void JSONStrToJSONArray1(String JSON_ARRAY_STR) {

        JSONArray jsonArray = JSON.parseArray(JSON_ARRAY_STR);
        // JSONArray jsonArray1 =JSONArray.parseArray(JSON_ARRAY_STR);//因为JSONArray继承了JSON,所以这样也是可以的
        
        // 遍历方式1
        int size = jsonArray.size();
        for (int i = 0; i < size; i++) {
            JSONObject jsonObject = jsonArray.getJSONObject(i);
            System.out.println(jsonObject.getString("studentName") + ":" + jsonObject.getInteger("studentAge"));
        }

        // 遍历方式2
        for (Object obj : jsonArray) {
            JSONObject jsonObject = (JSONObject) obj;
            System.out.println(jsonObject.getString("studentName") + ":" + jsonObject.getInteger("studentAge"));
        }
    }
    

    /**
     * 字符串(json基本类型格式)转换成JSONObject类型的json
     */
    public static void JSONStrToJSONObject(String JSON_OBJ_STR) {

        JSONObject jsonObject = JSON.parseObject(JSON_OBJ_STR);
        //JSONObject jsonObject1 = JSONObject.parseObject(JSON_OBJ_STR); //因为JSONObject继承了JSON,所以这样也是可以的
		System.out.println(jsonObject.getString("studentName") + ":" + jsonObject.getInteger("studentAge"));
    }
}

若要将一个数据类型格式的json字符串直接转换成一个list:
可以先根据json数组的key新建个 实体类:

public class Student {
    private String studentName;
    private String studentAge;
}

然后直接调用JSONArray.parseArray() 方法转换成对象list:

public class TestJson{
    final String JSON_ARRAY_STR = "[{\"studentName\":\"lily\",\"studentAge\":12},{\"studentName\":\"lucy\",\"studentAge\":15}]";
        
	public static void JSONStrToJSONArray1(String JSON_ARRAY_STR) {
        //直接转换成List
        List<IssueType> jsonList = JSONArray.parseArray(JSON_ARRAY_STR,Student.class);
        for (int i=0; i< jsonList.size(); i++){
            System.out.println(jsonList.get(i));
        }
    }
    public static void main(String[] args) {}
}

使用org.json.JSONArray / org.json.JSONObject 处理json

json字符串与JSONObject互转换

import org.json.JSONException;
import org.json.JSONObject;
public class TestJsonObject {
	 public static void main(String[] args) throws JSONException {
	        //记得转义
	        String jsonStr="{\"studentName\":\"zhangsanfeng\",\"studentAge\":18,\"school\":\"大学\"}";
	        //利用构造函数直接转换成JSONObject类型对象
	        JSONObject jsonObj = new JSONObject(jsonStr);
	        int age = jsonObj.getInt("studentAge");
	        String studentName= (String) jsonObj.get("studentName");
	        String school = jsonObj.optString("school");
	        
	        System.out.println(studentAge);
	        System.out.println(studentName);
	        System.out.println(school);
	    }
	 //可以用JSONObject类型对象的put方法添加。
     private static void jSONObject(){
	       JSONObject jsonObject = new JSONObject();//new一个JSONObject对象,命名为jsonObject
	       Object nullObj = null; //解决put中因二义性引起的编译错误
	       try{
	           jsonObject.put("name","王小二");
	           jsonObject.put("age",25.2);
	           jsonObject.put("birthday","1990-01-01")
	           jsonObject.put("major",new String[] {"理发","挖掘机"});
	           jsonObject.put("has_girlfriend",false);
	           jsonObject.put("car",nullObj);
	           jsonObject.put("house",nullObj);
	           System.out.println(jsonObject.toString());//输出JSON格式的wangxiaoer数据
	       }catch(JSONException e){
	           e.printStackTrace();
	       }
   }
}

JSON 与 Map 互相转换

import org.json.JSONArray;
import org.json.JSONObject;
public class TestJson {
    public static void main(String[] args) {
        // json字符串-简单对象型
        final String JSON_OBJ_STR = "{\"studentName\":\"lily\",\"studentAge\":12}";
        // json字符串-数组类型
        final String JSON_ARRAY_STR = "[{\"studentName\":\"lily\",\"studentAge\":12},{\"studentName\":\"lucy\",\"studentAge\":15}]";
    }

	/**
     * JSONObject转换Map
     */
    public static Map convertJsonObjectToMap(JSONObject json){
        Map resultMap = new HashMap();
        //获取所有的key的迭代器
        Iterator<String> iterator = json.keys();
        while (iterator.hasNext()){
            String key = iterator.next();
            resultMap.put(key,json.opt(key));//调用的是map.get(key)
//            resultMap.put(key,json.get(key));//json.get(key)方法底层调用的还是opt(key)
        }
        return resultMap;
    }
	 /**
     * Map转换JSONObject
     */
    public static JSONObject convertMapToJsonObject (Map<String,Object> map){
        JSONObject jsonObject = new JSONObject();
        //获取所有key的集合
        Set<String> set = map.keySet();
        Iterator<String> iterator = set.iterator();
        while (iterator.hasNext()){
            String key = iterator.next();
            jsonObject.put(key,map.get(key));
        }
        return jsonObject;
    }
	 /**
     * JsonArray转换MapList
     */
    public static List<Map> convertJsonArrayToMapList (JSONArray jsonArray){
        Map<String,Object> resultMap = new HashMap<>();
        List<Map> list = new ArrayList<>();
        for (int i=0; i<jsonArray.length(); i++){
            //获取每一个json中的每一个{}
            JSONObject json = jsonArray.optJSONObject(i);
            //将json的{}转化成map
            Map map = convertJsonObjectToMap(json);
            //将每一个map存入list中。
            list.add(map);
        }
        return list;
    }
    
}

实际场景json解析

场景1

json格式-基本类型:

{
    "student": "张三",
    "age": 18,
    "sex": true
}

解析方式:

JSONObject jsonObject=JSON.parseObject(result);      //转换成object
jsonObject.getString("returnAddress")    //获取object中returnAddress字段;                                                       

场景2

json格式-嵌套类型:

{
    "success":"true",
    "data":{
        "shop_uid":"123"
    }
}

解析方式:

JSONObject shop_user =JSON.parseObject(result);
JSON.parseObject(shop_user.getString("data")).getString("shop_uid")

场景3

json格式-对象嵌套带数组类型:

{
	"students": [
        {
            "student": "张三",
            "age": 18,
            "sex": true
        },
        {
            "student": "李四",
            "age": 19,
            "sex": false
        }
    ]
}

解析方式:

	JSONObject json = new JSONObject(data);
	JSONArray rows = json.optJSONArray("students");
	for (int i = 0; i < rows.length(); i++) {
		JSONObject row = rows.optJSONObject(i);
		//打印出student字段值
		System.out.println(row.optString("student"));
	}

场景4

直接处理JSONArray格式数据:
处理成List<实体类型>的list。

解析方式:

List<ReasonDTO> ReasonDTOList = new ArrayList<>();
JSONArray array = (JSONArray) dadaApiResponse.getResult();
          array.stream().forEach(
                    i ->{
                        JSONObject object = JSONArray.parseObject(i.toString());
                        ReasonDTO cancelReasonDTO = new CancelReasonDTO();
                        ReasonDTO.setCancelCode((Integer) object.get("id"));
                        ReasonDTO.setCancelName((String) object.get("reason"));
                        ReasonDTOList.add(ReasonDTO);
                    }
            );

参考:
https://blog.csdn.net/jike11231/article/details/106230586/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/155655.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Git】Git分支操作

4、Git 分支操作 4.1、什么是分支 在版本控制过程中&#xff0c;同时推进多个任务&#xff0c;为每个任务&#xff0c;我们就可以创建每个任务的单独分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来&#xff0c;开发自己分支的时候&#xff0c;不会影响主线分…

复制PDF文字时去掉换行符

问题描述 当我们在pdf上复制文字时&#xff0c;每行总会出现换行符&#xff0c;乱糟糟的。 解决方法 ⚠️注意&#xff1a; windows推荐开源软件cpoy&#xff1a;gihub:copy 临时使用&#xff0c;推荐网页&#xff1a;文字替换在线处理工具 在快捷指令中新建“快捷服务”&…

RHCE学习笔记-253-2

electronic mail services(sendmail,postfix) sendmail features 支持许多种不同邮件地址的格式 TCP/IP userhostname BitNet UUCP FidoNet MCImail 可以伪装邮寄者寄出去的邮件 当传送失败自动重试 security and “anti-spam” features 安全性特性 如果无法解析地址就退回这封…

C++学习之旅 第五章:字符串详解

目录 开头&#xff1a; C字符串的两种形式&#xff1a; C 风格字符串 STL库中char类型的字符串操作函数&#xff1a; C 中的 String 类 STL库中string类型的操作函数&#xff1a; 1&#xff0e;声明一个C字符串 String类的构造函数和析构函数如下&#xff1a; 2&#…

RK3568开发板Visual Studio Code 插件安装

我们在此以 ubuntu 环境为例&#xff0c;讲解 Visual Studio Code 插件安装。 VSCode 支持多种语言&#xff0c;比如 C/C、Python、C#等等&#xff0c;对于嵌入式开发的我们主要用 来编写 C/C程序的&#xff0c;所以需要安装 C/C的扩展包&#xff0c;扩展包安装很简单&#xff…

若依移动端Ruoyi-App——开发总结

1. 去掉验证码 &#xff08;1&#xff09;在系统管理菜单中——》参数设置——》找到账户自助-验证码开关——》修改键值为false。 &#xff08;2&#xff09;在移动端前端将login.vue的captchaEnabled改为false&#xff0c;关闭验证码开关 &#xff08;3&#xff09;在移动端…

数据库,计算机网络、操作系统刷题笔记30

数据库&#xff0c;计算机网络、操作系统刷题笔记30 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&#xff0c;你就得学数据库&#xff0c;sql&#xff0c;oracle…

Linux篇【5】:Linux 进程概念(五):环境变量

目录 环境变量 常见的环境变量 基本概念 查看环境变量内容的方法 测试环境变量PATH 与环境变量相关的命令 Linux操作系统下C/C程序代码中获取环境变量的方式 环境变量的组织方式 环境变量通常具有全局属性 环境变量 问题&#xff1a; 注意&#xff1a;可执行程序 等价于 命令/指…

【记录二】图层添加+坐标系转换理论+dva理论

坐标系一、坐标系地理坐标系cesium中的几种坐标系代码封装二、网页通讯模块PWAServiceWorker三、代码四、dva理论知识dva定义从redux -> dva带model的代码结构带model的数据流图一、坐标系 地理坐标系 cesium中的几种坐标系 链接: Cesium中的几种坐标和相互转换 代码封装…

Flowable进阶学习(一)表结构、ProcessEngine、Service、BPMN图标

文章目录一、Flowable表结构1.表结构讲解二、ProcessEngine讲解2.1 加载默认的配置文件2.2 加载自定义配置文件2.3 ProcessEngine源码2.4 ProcessEngineConfiguration中的init()方法2.5 ProcessEngine各种方式对比三、Service服务接口3.1 Service创建方式与名称作用简介四、Flo…

mysql核心知识-----索引

文章目录索引的概念和用途应用层的mysql&#xff08;各种操作语句&#xff09;与底层的mysql数据库&#xff08;磁盘上的文件&#xff09;交互IO的单位深入理解索引聚簇索引 VS 非聚簇索引普通&#xff08;辅助&#xff09;索引什么字段适合做主键&#xff1f;索引的概念和用途…

1.ISAAC简介

ISAAC简介 ISAAC教程合集地址: https://blog.csdn.net/kunhe0512/category_12163211.html Isaac 是 NVIDIA 的智能机器人开放平台。 Isaac SDK 提供了大量强大的 GPU 加速算法 GEM&#xff0c;用于导航和操作。 Isaac SDK Engine 是一个框架&#xff0c;可以轻松编写模块化应…

Android开发应用案例——简易计算器(附完整源码)

Android开发-AS学习&#xff08;一&#xff09;Android开发-AS学习&#xff08;二&#xff09;使用android studio开发简易计算器app&#xff08;完整源码可在博主资源中自行下载&#xff09;最终效果&#xff1a;开发步骤&#xff1a;创建一个名为calculator的新项目编写代码项…

Java加解密(六)基于口令(PBE)加密

目录基于口令&#xff08;PBE&#xff09;加密1 定义2 加密过程3 解密过程5 PBE加密算法会话密钥保存4 使用场景5 JDK支持的PBE加密算法6 Bouncy Castle 支持的PBE加密算法7 算法调用示例基于口令&#xff08;PBE&#xff09;加密 1 定义 PBE&#xff08;Password Based Encr…

linux文件管理和用户管理(二)

1、学习linux的原因&#xff1a; linux是一些做项目运维的工作人员用到最多的一个工具普通程序员学习linux的目的是为了让项目部署到服务器上&#xff0c;而大多数服务器都是linux系统&#xff08;centOS&#xff09;&#xff0c;所以对Linux要有基本的使用能力。 2、文件系统…

Python采集专栏文档保存成pdf

前期准备 环境使用 Python 3.8Pycharm 模块使用 requests >>> pip install requests 数据请求parsel >>> pip install parsel 数据解析re >>> 内置模块 不需要安装 正则表达式pdfkit >>> pip install pdfkit 实现步骤 采集文章内容,…

【前端】Vue项目:旅游App-(12)home-Calendar:日期选择、日历、动态显示时间

文章目录目标过程与代码安装依赖结构样式动态数据&#xff1a;默认数据今天明天添加日历修改样式动态数据&#xff1a;显示日历中选择的数据效果总代码修改或添加的文件formatDate.jshome.vuemain.js目标 点击时间&#xff1a; 弹出日历供选择&#xff1a; 动态显示数据&#…

Linux设备树简析

1. 前言 限于作者能力水平&#xff0c;本文可能存在谬误&#xff0c;因此而给读者带来的损失&#xff0c;作者不做任何承诺。 2. 设备树的来源 在 Linux 中&#xff0c;每个设备驱动&#xff0c;管理一组设备数据&#xff0c;类似面向对象编程中类和其实例对象的关系。一段时…

视频播放破亿,抖音近期的流量密码是什么

纵观12月抖音涨粉趋势&#xff0c;美食、医疗健康、生活日常等细分领域中涌现出不少优质账号&#xff0c;圈粉不断。从『粉丝飙升榜』TOP30来看&#xff0c; 12月上榜达人的更替率高达76.6%&#xff0c;向太陈岚单日涨粉557.26w&#xff0c;12月共收获751.09w粉丝&#xff0c;空…

做好网络舆情监测监控的重要性,TOOM网络舆情监控平台建设方案?

舆情监控在当今时代非常重要&#xff0c;互联网走进千家万户&#xff0c;各种信息在网络上传播&#xff0c;舆情监控旨在帮助公司了解公众对其产品、服务、品牌形象等的看法&#xff0c;并及时采取应对措施。接下来简单了解做好网络舆情监测监控的重要性&#xff0c;TOOM网络舆…