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

JSONObject和Map<String, Object>的转换

一、前言

Java开发中出参返回和入参传入更灵活的方法是使用Map<String, Object>入参或出参,或者使用JSONObject。

1、好处,参数可变,对接口扩展性很友好。

public ResponseData<WXModelDTO> getUserInfo(@RequestBody  Map<String, Object> map )

在获取参数的时候就可以通过

if (map.containsKey("code")) {
            code = map.get("code").toString();
        }

动态选择需要的参数

public WXModelDTO getUserInfo(Map<String, Object> map) {String code = "";String wxCode = "";if (map.containsKey("code")) {code = map.get("code").toString();}if (map.containsKey("wxCode")) {wxCode = map.get("wxCode").toString();}

如果使用对象实体去传参,就需要入参的字段都有,不方便扩展

二、JSONObject和Map<String, Object>的转换

在Java中,JSONObject 和 Map<String, Object> 之间的转换是常见的操作,特别是在处理JSON数据和Java对象时。虽然 JSONObject 是来自某个库(如org.json或com.alibaba.fastjson等)的类,而 Map<String, Object> 是Java标准库中的一部分,但两者之间的转换可以通过简单的方法实现。

从 JSONObject 转换到 Map<String, Object>

对于不同的JSON处理库,转换的方法可能会有所不同,但基本原理相同。这里以 org.json 和 com.alibaba.fastjson 为例:

使用 org.json
import org.json.JSONObject;  import java.util.HashMap;  
import java.util.Iterator;  
import java.util.Map;  public class JsonToMap {  public static Map<String, Object> toMap(JSONObject obj) {  Map<String, Object> map = new HashMap<>();  Iterator<String> keysItr = obj.keys();  while(keysItr.hasNext()) {  String key = keysItr.next();  map.put(key, obj.get(key));  }  return map;  }  // 示例  public static void main(String[] args) {  JSONObject jsonObject = new JSONObject();  jsonObject.put("name", "John Doe");  jsonObject.put("age", 30);  Map<String, Object> map = toMap(jsonObject);  System.out.println(map);  }  
}
使用 com.alibaba.fastjson

Fastjson提供了更为便捷的方法:

import com.alibaba.fastjson.JSONObject;  import java.util.Map;  public class FastJsonToMap {  public static Map<String, Object> toMap(JSONObject jsonObject) {  return jsonObject; // 因为fastjson的JSONObject实现了Map接口  }  // 示例  public static void main(String[] args) {  JSONObject jsonObject = new JSONObject();  jsonObject.put("name", "John Doe");  jsonObject.put("age", 30);  Map<String, Object> map = toMap(jsonObject);  System.out.println(map);  }  
}
import com.alibaba.fastjson.JSONObject;  import java.util.Map;  public class FastMapToJson {  public static JSONObject toJson(Map<String, Object> map) {  return JSONObject.parseObject(JSONObject.toJSONString(map));  }  // 或者直接使用  public static JSONObject toJsonSimple(Map<String, Object> map) {  return (JSONObject) JSONObject.toJSON(map);  }  // 示例  public static void main(String[] args) {  Map<String, Object> map = Map.of("name", "John Doe", "age", 30);  JSONObject jsonObject = toJsonSimple(map);  System.out.println(jsonObject.toJSONString());  }  
}

相关文章:

JSONObject和Map<String, Object>的转换

一、前言 Java开发中出参返回和入参传入更灵活的方法是使用Map<String, Object>入参或出参&#xff0c;或者使用JSONObject。 1、好处&#xff0c;参数可变&#xff0c;对接口扩展性很友好。 public ResponseData<WXModelDTO> getUserInfo(RequestBody Map<…...

C# 建造者模式(Builder Pattern)

建造者模式&#xff08;Builder Pattern&#xff09;&#xff0c;也被称为生成器模式&#xff0c;是一种对象构建模式&#xff0c;旨在将复杂对象的构建过程与表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。这种模式特别适用于构建具有多个组成部分的复杂对象&am…...

初阶数据结构速成

本篇文章算是对初阶数据结构的总结&#xff0c;内容较多&#xff0c;请耐心观看 基础概念部分 顺序表 线性表&#xff08; linear list &#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是⼀种在实际中⼴泛使 ⽤的数据结构&#xff0c;常⻅的线性表&#xff1a;…...

nx上darknet的使用-目标检测-在python中的使用

1 内置的代码 在darknet中已经内置了两个py文件 darknet_video.py与darknet_images.py用法类似&#xff0c;都是改一改给的参数就行了&#xff0c;我们说一下几个关键的参数 input 要预测哪张图像weights 要使用哪个权重config_file 要使用哪个cfg文件data_file 要使用哪个da…...

Python高级(四)_内存管理

Python高级-内存管理 第四章 内存管理 1、对象池 小整数池 系统默认创建好的,等着你使用 概述:整数在程序中的使用非常广泛,Python为了优化速度,使用了小整数对象池,避免为整数频繁申请和销毁内存空间。Python 对小整数的定义是 [-5, 256] ,这些整数对象是提前建立好的…...

关键路径-matlab

路径上边的数目称为路径长度 图的基本知识 求最短路径&#xff08;Dijkstra算法&#xff09; 2. 待继续尝试 ①Dijkstra ②floyd_all.m 一 二 ③ LeetCode [329. 矩阵中的最长递增路径]...

JavaDS —— 单链表 与 LinkedList

顺序表和链表区别 ArrayList &#xff1a; 底层使用连续的空间&#xff0c;可以随机访问某下标的元素&#xff0c;时间复杂度为O&#xff08;1&#xff09; 但是在插入和删除操作的时候&#xff0c;需要将该位置的后序元素整体往前或者向后移动&#xff0c;时间复杂度为O&…...

LangChain —— Message —— how to filter messages

文章目录 一、概述二、基本使用三、连成链 一、概述 在更复杂的链和代理中&#xff0c;我们可能会使用消息列表跟踪状态。此列表可以开始累积来自多个不同模型、说话者、子链等的消息&#xff0c;我们可能只想将此完整消息列表的子集传递给链/代理中的每个模型调用。 filter_me…...

conda install问题记录

最近想用代码处理sar数据&#xff0c;解放双手。 看重了isce这个处理平台&#xff0c;在安装包的时候遇到了一些问题。 这一步持续了非常久&#xff0c;然后我就果断ctrlc了 后面再次进行尝试&#xff0c;出现一大串报错&#xff0c;不知道是不是依赖项的问题 后面看到说mam…...

【python】IPython的使用技巧

IPython使用技巧 一、魔法命令 %timeit 用途&#xff1a;用于测量一段代码的执行时间&#xff0c;这对于评估代码的性能非常有帮助&#xff0c;尤其适用于需要进行性能优化和比较不同实现方式效率的场景。示例&#xff1a;%timeit [x**2 for x in range(1000)]扩展&#xf…...

常用知识点问答

kafka如何部署&#xff1f; 先说明kafka的版本如果是 2.X 版本&#xff0c;则要先部署 3或5 个服务器的zookeeper集群&#xff0c;然后在每个zookeeper服务器上部署kafka应用。如果是 3.X 版本&#xff0c;kafka不再依赖zookeeper&#xff0c;所以可以直接在java17的环境上部署…...

paddlenlp cpu windows 下测试gpt

paddlenlp 安装python3.11版本 conda create -n python311 python3.11 激活python conda activate python311 安装paddlepaddle conda install paddlepaddle3.0.0b0 -c paddle pip install paddlenlp3.0.0b0 -U -i https://pypi.tuna.tsinghua.edu.cn/simple windows下…...

uboot的功能

uboot裸机程序&#xff0c;uboot的核心功能是启动内核 uboot启动流程 XIP设备&#xff1a; 1、硬件初始化 2、读flash上面的内核&#xff0c;拷贝进内存 3、启动内核 非XIP设备 1、BROM程序拷贝uboot到RAM 2、执行uboot 3、硬件初始化 4、读flash上面的内核&#xff0c;拷贝进…...

java导出word实现

参考&#xff1a;Poi-tl Documentation...

Flink 提交作业的方式

首先我进行了flink单机部署&#xff0c;个人建议不管是学习还是开发尽量不使用 然后开始了flink自带集群部署&#xff0c;部署在三台服务器上&#xff0c;资源管理由flink集群自己管理&#xff0c;然后为了解决集群的单点故障问题&#xff0c;使用zookeeper监听事件&#xff0…...

JVM系列 | 垃圾收集算法

JVM系列 | 垃圾收集算法 文章目录 前言如何判断对象已"死"&#xff1f;引用计数法可达性分析算法可达性分析2.0版 | 引用的增强对象的消亡过程回收方法区主要回收目标&#xff1a;回收操作 垃圾收集算法分代收集理论 与 跨代引用假说分代收集理论跨带引用假说 垃圾收…...

深入理解Spring Boot中的事件驱动架构

深入理解Spring Boot中的事件驱动架构 大家好&#xff0c;我是微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 1. 引言 事件驱动架构在现代软件开发中越来越受欢迎&#xff0c;它能够提高系统的松耦合性和可扩展性。Sprin…...

Moldflow安装包下载:附网盘地址+详细教程步骤

如大家所了解的&#xff0c;Autodesk Moldflow仿真软件具有注塑成型仿真工具&#xff0c;能够帮助您验证和优化塑料零件、注塑模具和注塑成型流程。目前常用的版本有Moldflow 2019和Moldflow2023。 还没有获取Moldflow软件安装包资源的小伙伴&#xff0c;可以用百度云盘保存或下…...

2024辽宁省数学建模B题【钢铁产品质量优化】思路详解

2024 辽宁省大学数学建模竞赛试题 B 题 钢铁产品质量优化 由于连续退火工序中各阶段的工艺参数之间存在耦合性&#xff08;加热炉的温度设定会影响后续均热与冷却温度的设定&#xff0c;以及带钢穿行速度&#xff09;&#xff0c;导致难以建立该工序的机理模型&#xff0c;从而…...

C++基础入门(上)

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 C基础入门(上) 收录于专栏【C语法基础】 本专栏旨在分享学习C的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 1. C发展历史 2. C版本…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

python打卡day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

rnn判断string中第一次出现a的下标

# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...