objectMapper、ObjectNode、JsonNode调用接口时进行参数组装
objectMapper、ObjectNode、JsonNode用于调用接口时进行参数组装···
public String sendText( List< String > listUser, String content ) throws JsonProcessingException{if ( listUser.size() <= 0 ){return "用户ID为空!";}if ( content.length() <= 0 ){return "发送内容为空!";}final String url = WeComConstans.WE_COM_HOST + WeComConstans.WE_COM_SEND_TEXT;final ObjectMapper objectMapper = new ObjectMapper();final ObjectNode objectNode = objectMapper.createObjectNode();//参数组装JsonNode toUserJson = objectMapper.valueToTree( listUser );objectNode.set( "toUser", toUserJson );objectNode.put( "content", content );//调用接口final String resultString = WeComUtil.doPost( url, objectNode.toString() );log.info( "############################# Parameter: " + objectNode );log.info( "############################# Call: " + url + "返回结果:\n" + resultString );final JsonNode jsonNode1 = objectMapper.readTree( resultString );if ( jsonNode1.path( "code" ).asInt() == 200 ){System.out.println( "信息发送成功!" );}else{System.out.println( "信息发送失败!" );}return resultString;}
运行结果:
{"toUser":["s1825","s1824"],"content":"测试信息,请忽略!"}
-----------------------------------------------------------------
更加复杂的组装:
final Map< String, JsonNode > resultMap = new HashMap< String, JsonNode >();final ObjectMapper objectMapper = new ObjectMapper();final ObjectNode paramJson = objectMapper.createObjectNode();List< Object > objectList = vendorDao.getSpendDataVendorVOsByCondition( vendorVO );List< HashMap< String, String > > suppliers = new ArrayList<>();for ( int i = 0; i < objectList.size(); i++ ){HashMap< String, String > map = new HashMap<>();map.put( "third_id", tempVendorVO.getVendorId() );suppliers.add( map );// 组装请求参数JsonNode jsonNode = objectMapper.valueToTree( suppliers );paramJson.set( "suppliers", jsonNode );if ( suppliers.size() >= 10 ){String result = HttpClientUtil.doPostJsonToken( SpendConstans.HOST_URL + SpendConstans.INT_ADD_PYMENT_CUSTOM_SUPPLIER_DELETE, paramJson.toString(), getToken() );// 把集合清空suppliers.clear();explainCustomResult( result, resultMap );}}if ( suppliers.size() > 0 ){String result = HttpClientUtil.doPostJsonToken( SpendConstans.HOST_URL + SpendConstans.INT_ADD_PYMENT_CUSTOM_SUPPLIER_DELETE, paramJson.toString(), getToken() );explainCustomResult( result, resultMap );}
ObjectMapper
ObjectMapper 是 Jackson 库中的一个核心类,用于将 Java 对象序列化为 JSON 格式或将 JSON 数据反序列化为 Java 对象。Jackson 是一个流行的 Java JSON 处理库,广泛用于处理 JSON 数据。
以下是 ObjectMapper 的一些基本用法:
-
创建 ObjectMapper 实例:
javaCopy code ObjectMapper objectMapper = new ObjectMapper();
-
将 Java 对象序列化为 JSON:
// Java 对象
MyObject myObject = new MyObject("John", 25);
// 序列化为 JSON 字符串String jsonString = objectMapper.writeValueAsString(myObject);
将 JSON 反序列化为 Java 对象:
// JSON 字符串String jsonString = "{\"name\":\"John\",\"age\":25}";
// 反序列化为 Java 对象MyObject myObject = objectMapper.readValue(jsonString, MyObject.class);
-
高级用法和配置:
ObjectMapper 支持许多配置选项,例如设置日期格式、忽略空值、自定义序列化器和反序列化器等。以下是一些示例:
// 设置日期格式 objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd"));
// 忽略空值 objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
// 自定义序列化器和反序列化器SimpleModule module = new SimpleModule();
module.addSerializer(MyObject.class, new MyObjectSerializer());
module.addDeserializer(MyObject.class, new MyObjectDeserializer());
objectMapper.registerModule(module);
-
处理复杂类型:
// 序列化 List<MyObject> 为 JSON 数组
List<MyObject> myList = Arrays.asList(new MyObject("John", 25), new MyObject("Alice", 30));
String jsonArray = objectMapper.writeValueAsString(myList); // 反序列化 JSON 数组为 List<MyObject> List<MyObject> deserializedList = objectMapper.readValue(jsonArray, new TypeReference<List<MyObject>>(){});
ObjectMapper 提供了强大的功能,适用于各种 JSON 处理场景。
ObjectNode
ObjectNode 是 Jackson 库中的一个类,属于 Jackson 提供的树模型(Tree Model)。树模型允许你以树的形式操作 JSON 数据,而不是直接映射到 Java 对象。ObjectNode 代表 JSON 对象,它是 JsonNode 的一个具体实现。
以下是 ObjectNode 的基本用法:
1. 创建 ObjectNode 实例:
ObjectMapper objectMapper = new ObjectMapper();
ObjectNode objectNode =objectMapper.createObjectNode();
2. 添加属性到 ObjectNode:
objectNode.put("name", "John");
objectNode.put("age", 25);
3. 添加子对象到 ObjectNode:
ObjectNode addressNode = objectMapper.createObjectNode(); addressNode.put("city", "New York");
addressNode.put("zipcode", "10001");
objectNode.set("address", addressNode);
4. 获取属性值:
String name = objectNode.get("name").asText(); int age = objectNode.get("age").asInt();
5. 遍历 ObjectNode 的属性:
Iterator<Map.Entry<String, JsonNode>> fields = objectNode.fields(); while(fields.hasNext()) { Map.Entry<String, JsonNode> entry = fields.next(); String fieldName= entry.getKey(); JsonNode fieldValue = entry.getValue(); // 处理属性值 }
6. 将 ObjectNode 转换为 JSON 字符串:
String jsonString = objectNode.toString();
7. 从 JSON 字符串解析为 ObjectNode:
String json = "{\"name\":\"John\",\"age\":25}";
ObjectNode parsedObjectNode =objectMapper.readValue(json, ObjectNode.class);
ObjectNode 提供了一种方便的方式来处理和操作 JSON 数据,特别适用于需要在运行时动态构建或操作 JSON 结构的场景。然而,如果你的 JSON 结构固定,并且可以映射到一个已知的 Java 类型,那么使用对象映射(Object Mapping)可能更为直观和方便。
JsonNode
JsonNode 是 Jackson 库中的一个抽象类,代表了 JSON 中的节点。JsonNode 是 Jackson 树模型的基础,它提供了一种在 Java 中以树的形式表示 JSON 结构的方式。JsonNode 的具体实现包括 ObjectNode、ArrayNode、TextNode 等。
以下是一些基本的用法:
1. 创建 JsonNode 实例:
ObjectMapper objectMapper = new ObjectMapper(); JsonNode jsonNode =objectMapper.readTree("{\"name\":\"John\",\"age\":25}");
2. 获取属性值:
String name = jsonNode.get("name").asText(); int age = jsonNode.get("age").asInt();
3. 处理数组节点:
JsonNode arrayNode = objectMapper.readTree("[1, 2, 3, 4, 5]"); // 遍历数组 for (JsonNode element : arrayNode) { int value = element.asInt(); // 处理数组元素 }
4. 处理对象节点:
JsonNode objectNode = objectMapper.readTree("{\"name\":\"John\",\"age\":25}"); // 遍历对象的属性 Iterator<Map.Entry<String, JsonNode>> fields = objectNode.fields(); while(fields.hasNext()) { Map.Entry<String, JsonNode> entry = fields.next(); String fieldName= entry.getKey(); JsonNode fieldValue = entry.getValue(); // 处理属性值 }
5. 判断节点类型:
if (jsonNode.isObject()) { // 处理对象节点 } else if (jsonNode.isArray()) { // 处理数组节点 } else if (jsonNode.isTextual()) { // 处理文本节点 } else { // 其他类型处理 }
6. 转换为字符串:
String jsonString = jsonNode.toString();
JsonNode 提供了一种灵活的方式来处理和操作 JSON 数据,尤其适用于需要在运行时动态处理或导航 JSON 结构的场景。但要注意,相比于对象映射(Object Mapping),树模型的操作可能相对繁琐,而且需要更多的手动处理。选择使用 JsonNode 还是对象映射取决于具体的使用场景和需求。
相关文章:
objectMapper、ObjectNode、JsonNode调用接口时进行参数组装
objectMapper、ObjectNode、JsonNode用于调用接口时进行参数组装 public String sendText( List< String > listUser, String content ) throws JsonProcessingException{if ( listUser.size() < 0 ){return "用户ID为空!";}if ( content.lengt…...
2024开年,手机厂商革了自己的命
文|刘俊宏 编|王一粟 2024开年,AI终端的号角已经由手机行业吹响。 OPPO春节期间就没闲着,首席产品官刘作虎在大年三十就迫不及待地宣布,OPPO正式进入AI手机时代。随后在开年后就紧急召开了AI战略发布会,…...
【安全】大模型安全综述
大模型相关非安全综述 LLM演化和分类法 A survey on evaluation of large language models,” arXiv preprint arXiv:2307.03109, 2023.“A survey of large language models,” arXiv preprint arXiv:2303.18223, 2023.“A survey on llm-gernerated text detection: Necess…...
Stable Diffusion 模型分享:AstrAnime(Astr动画)
本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五 下载地址 模型介绍 AstrAnime 是一个动漫模型,画风色彩鲜明,擅长绘制漂亮的小姐姐。 条目内容类型大模型…...
【GPTs分享】每日GPTs分享之Canva
简介 Canva,旨在帮助用户通过Canva的用户友好设计平台释放用户的创造力。无论用户是想设计海报、社交媒体帖子还是商业名片,Canva都在这里协助用户将创意转化为现实。 主要功能 设计生成:根据用户的描述和创意需求,生成定制的设…...
【机器学习】数据清洗——基于Pandas库的方法删除重复点
🎈个人主页:豌豆射手^ 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:机器学习 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进…...
顺序表增删改查(c语言)
main函数: #include <stdio.h>#include "./seq.h"int main(int argc, const char *argv[]){SeqList* list create_seqList();insert_seqList(list,10);insert_seqList(list,100);insert_seqList(list,12);insert_seqList(list,23);show_seqList(l…...
MyBatis Plus中的动态表名实践
随着数据库应用的不断发展,面对复杂多变的业务需求,动态表名的处理变得愈发重要。在 MyBatis Plus(以下简称 MP)这一优秀的基于 MyBatis 的增强工具的支持下,我们可以更便捷地应对动态表名的挑战。本文将深入研究如何在…...
JAVA IDEA 项目打包为 jar 包详解
前言 如下简单 maven 项目,现在 maven 项目比较流行,你还没用过就OUT了。需要打包jar 先设置:点击 File > Project Structure > Artifacts > 点击加号 > 选择JAR > 选择From modules with dependencies 一、将所有依赖和模…...
概率基础——几何分布
概率基础——几何分布 介绍 在统计学中,几何分布是描述了在一系列独立同分布的伯努利试验中,第一次成功所需的试验次数的概率分布。在连续抛掷硬币的试验中,每次抛掷结果为正面向上的概率为 p p p,反面向上的概率为 1 − p 1-p …...
JavaScript的内存管理与垃圾回收
前言 JavaScript提供了高效的内存管理机制,它的垃圾回收功能是自动的。在我们创建新对象、函数、原始类型和变量时,所有这些编程元素都会占用内存。那么JavaScript是如何管理这些元素并在它们不再使用时清理它们的呢? 在本节中,…...
Neo4j导入数据之JAVA JDBC
目录结构 前言设置neo4j外部访问代码整理maven 依赖java 代码 参考链接 前言 公司需要获取neo4j数据库内容进行数据筛查,neo4j数据库咱也是头一次基础,辛辛苦苦安装好整理了安装neo4j的步骤,如今又遇到数据不知道怎么创建,关关难…...
LeetCode 2878.获取DataFrame的大小
DataFrame players: ------------------- | Column Name | Type | ------------------- | player_id | int | | name | object | | age | int | | position | object | | … | … | ------------------- 编写一个解决方案,计算并显示 players 的 行数和列数。 将结…...
索引失效的 12 种情况
目录 一、未使用索引字段进行查询 二、索引列使用了函数或表达式 三、使用了不等于(! 或 <>)操作符 四、LIKE 操作符的模糊查询 五、对索引列进行了数据类型转换 六、使用 OR 连接多个条件 七、表中数据量较少 八、索引列上存在大量重复值…...
Spring及工厂模式概述
文章目录 Spring 身世什么是 Spring什么是设计模式工厂设计模式什么是工厂设计模式简单的工厂设计模式通用的工厂设计 总结 在 Spring 框架出现之前,Java 开发者使用的主要是传统的 Java EE(Java Enterprise Edition)平台。Java EE 是一套用于…...
运维SRE-19 网站Web中间件服务-http-nginx
Ans自动化流程 1.网站集群核心协议:HTTP 1.1概述 web服务:网站服务,网站协议即可. 协议:http协议,https协议 服务:Nginx服务,Tengine服务....1.2 HTTP协议 http超文本传输协议,负责数据在网站…...
C语言—自定义(构造)类型
2.20,17.56 1.只有当我们使用结构体类型定义变量/结构体数组,系统才会为结构体的成员分配内存空间,用于存储对应类型的数据 2.strct 结构体 一起作为结构体类型标识符 嘿嘿暂时先这样,我会回来改的1、定义一个表示公交线路的结构体,要…...
ArcgisForJS如何实现添加含图片样式的点要素?
文章目录 0.引言1.加载底图2.获取点要素的坐标3.添加含图片样式的几何要素4.完整实现 0.引言 ArcGIS API for JavaScript 是一个用于在Web和移动应用程序中创建交互式地图和地理空间分析应用的库。本文在ArcGIS For JavaScript中使用Graphic对象来创建包含图片样式的点要素。 …...
C#之WPF学习之路(2)
目录 控件的父类 DispatcherObject类 DependencyObject类 DependencyObject 类的关键成员和方法 Visual类 Visual 类的主要成员和方法 UIElement类 UIElement 类的主要成员和功能 FrameworkElement类 FrameworkElement 类的主要成员和功能 控件的父类 在 WPF (Windo…...
胶原抗体诱导小鼠关节炎模型
胶原诱导性关节炎小鼠(CIA)作为人类类风湿关节炎模型应用广泛,但CIA引起的关节炎起病比较缓慢,造模周期较长,一般为6-8周(1-12)。Chondrex公司已开发出单一种单克隆抗体合剂诱导的小鼠关节炎模型(CAIA),明显缩短了造模…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
