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

动态封装对象,属性来自json

需求: 如何动态的获取一个对象的字段,假如一个对象里面有name,age,sex三个字段,我想取name的值,这个name是存在一个json中,json的格式如下[{"key":"name"},{"key":"age"},{"key":"sex"}]先遍历这个json,然后再根据key的值,取对象中对应的属性值。  也就是获取json对应的key的value,封装到对象中。

GPT给出的答案:

在 Java 中,你可以按照以下步骤动态获取一个对象的字段:1. 遍历 JSON 数组,获取每个对象的 `key` 值。
2. 使用获取到的 `key` 值作为属性名称,利用 Java 反射机制获取对象的对应属性值。下面是一个示例代码:```java
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;import java.util.List;public class Main {public static void main(String[] args) throws Exception {String jsonStr = "[{\"key\":\"name\"},{\"key\":\"age\"},{\"key\":\"sex\"}]";ObjectMapper objectMapper = new ObjectMapper();List<JsonNode> data = objectMapper.readValue(jsonStr, List.class);Person person = new Person("John", 25, "male");for (JsonNode item : data) {String key = item.get("key").asText();Object value = getValueByKey(person, key);System.out.println(key + ": " + value);}}public static Object getValueByKey(Object obj, String key) throws Exception {return obj.getClass().getMethod("get" + capitalize(key)).invoke(obj);}public static String capitalize(String str) {if (str == null || str.isEmpty()) {return str;}return Character.toUpperCase(str.charAt(0)) + str.substring(1);}
}class Person {private String name;private int age;private String sex;public Person(String name, int age, String sex) {this.name = name;this.age = age;this.sex = sex;}public String getName() {return name;}public int getAge() {return age;}public String getSex() {return sex;}
}
```这段代码将输出:```
name: John
age: 25
sex: male
```请注意,上述代码中的 `Person` 类是一个简单的示例,具有 `name`、`age` 和 `sex` 三个字段,并为每个字段提供了对应的 `get` 方法。你可以根据你的实际需求修改代码以适应你的对象结构和命名规则。

问题: 基于上面的问题,那要是想设置对象属性值呢?

GPT的答案:

如果你想设置对象的属性值,你可以按照以下步骤进行操作:1. 遍历 JSON 数组,获取每个对象的 `key` 值和对应的属性值。
2. 使用获取到的 `key` 值作为属性名称,利用 Java 反射机制设置对象的属性值。下面是一个示例代码:```java
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;import java.util.List;public class Main {public static void main(String[] args) throws Exception {String jsonStr = "[{\"key\":\"name\",\"value\":\"John\"},{\"key\":\"age\",\"value\":25},{\"key\":\"sex\",\"value\":\"male\"}]";ObjectMapper objectMapper = new ObjectMapper();List<JsonNode> data = objectMapper.readValue(jsonStr, List.class);Person person = new Person();for (JsonNode item : data) {String key = item.get("key").asText();Object value = item.get("value").asText();setValueByKey(person, key, value);}System.out.println(person);}public static void setValueByKey(Object obj, String key, Object value) throws Exception {obj.getClass().getMethod("set" + capitalize(key), value.getClass()).invoke(obj, value);}public static String capitalize(String str) {if (str == null || str.isEmpty()) {return str;}return Character.toUpperCase(str.charAt(0)) + str.substring(1);}
}class Person {private String name;private int age;private String sex;public Person() {}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 String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +", sex='" + sex + '\'' +'}';}
}
```这段代码将输出:```
Person{name='John', age=25, sex='male'}
```请注意,上述代码中的 `Person` 类是一个简单的示例,具有 `name`、`age` 和 `sex` 三个字段,并为每个字段提供了对应的 `get` 和 `set` 方法。你可以根据你的实际需求修改代码以适应你的对象结构和命名规则。

相关文章:

动态封装对象,属性来自json

需求&#xff1a; 如何动态的获取一个对象的字段&#xff0c;假如一个对象里面有name,age&#xff0c;sex三个字段&#xff0c;我想取name的值&#xff0c;这个name是存在一个json中&#xff0c;json的格式如下[{"key":"name"},{"key":"age…...

【LeetCode-中等题】90. 子集 II

文章目录 组合并集问题汇总&#xff1a;题目方法一&#xff1a;递归加回溯&#xff08;去重版&#xff09; 组合并集问题汇总&#xff1a; 1、子集非去重版本 2、组合非去重版本 3、组合去重版本 题目 本题nums数组存在重复元素&#xff0c;所以本题会涉及一个去重操作&#…...

Docker如何安装seafile

SQLite 方式 要在 Docker 中安装 Seafile&#xff0c;您可以按照以下步骤进行操作&#xff1a; 安装 Docker&#xff1a;确保您的系统上已经安装了 Docker。您可以根据您的操作系统类型&#xff0c;在官方网站上找到适合您系统的 Docker 版本并进行安装。 下载 Seafile 镜像&…...

注册法国商标的步骤和时间

注册法国商标的步骤如下&#xff1a; 1、商标查询&#xff1a;在提交申请之前&#xff0c;建议进行商标查询&#xff0c;以确保商标在法国市场上具有独特性和显著性。 2、提交申请&#xff1a;通过法国知识产权局的在线平台提交商标申请。申请时&#xff0c;需要提供以下文件…...

一起学数据结构(6)——栈和队列

上篇文章中&#xff0c;对栈的概念及特点进行了解释&#xff0c;并且给出了栈实现的具体代码。本篇文章将给出队列的基本概念及特点。并给出相应的代码。 1. 队列的概念及结构&#xff1a; 在给出队列的概念之前&#xff0c;先给出上篇文章中提到的栈的概念&#xff1a;一种只…...

【数据结构】二叉树的顺序结构-堆

【数据结构】二叉树的顺序结构-堆 普通的二叉树是不适合用数组来存储的&#xff0c;因为可能会存在大量的空间浪费。而完全二叉树更适合使用顺序结构存储。现实中我们通常把堆(一种二叉树)使用顺序结构的数组来存储&#xff0c;需要注意的是这里的堆和操作系统虚拟进程地址空间…...

2024年java面试--mysql(2)

系列文章目录 2024年java面试&#xff08;一&#xff09;–spring篇2024年java面试&#xff08;二&#xff09;–spring篇2024年java面试&#xff08;三&#xff09;–spring篇2024年java面试&#xff08;四&#xff09;–spring篇2024年java面试–集合篇2024年java面试–redi…...

IllegalArgumentException

Caused by: java.lang.IllegalArgumentException:Invalid pulsar service : persistent 参数非法异常 这个异常是由于使用了无效的 Pulsar 服务类型导致的。Pulsar 支持不同的服务类型&#xff0c;例如 persistent、non-persistent 等。 当你在配置 Pulsar 相关的参数时&…...

Git 概述命令、idea中的使用

目录 Git概述 Git代码托管服务 Git常用命令 Git 全局设置 获取 Git 仓库 ​编辑Git 工作区中文件的状态 本地仓库操作 远程仓库操作 ​编辑分支操作 标签操作 在IDEA中使用Git 1.获取Git仓库 .gitignore 表示忽略 2.本地仓库操作 3.远程仓库操作 4.分支操作 Git是…...

单片机之硬件记录

一、概念 VBAT 当使用电池或其他电源连接到VBAT脚上时&#xff0c;当VDD断电时&#xff0c;可以保存备份寄存器的内容和维持RTC的功能。如果应用中没有使用外部电池&#xff0c;VBAT引脚应接到VDD引脚上。 VCC&#xff1a;Ccircuit 表示电路的意思,即接入电路的电压&#x…...

QQ文件传输协议研究

引言 我们都知道,现在越来越多的应用采取了 HTTPS or TLS 传输协议,对于一般的协议,我们可以使用中间人技术对流量进行劫持转发,从而破解密文,这边可以参见我的另外一篇文章基于加密邮件协议的中间人攻防实战, 而对于 HTTPS 应用即使是我们采取中间人技术,也很难让浏览器…...

Qt/C++音视频开发51-推流到各种流媒体服务程序

一、前言 最近将推流程序完善了很多功能,尤其是增加了对多种流媒体服务程序的支持,目前支持mediamtx、LiveQing、EasyDarwin、nginx-rtmp、ZLMediaKit、srs、ABLMediaServer等,其中经过大量的对比测试,个人比较建议使用mediamtx和ZLMediaKit,因为这两者支持的格式众多,不…...

LeetCode 35. 搜索插入位置

题目链接 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题目解析 该题我们可以采用二分查找的方式&#xff0c;我们可以把数组分为&#xff0c;小于target的一边儿和大于等于target的一边儿。 当midleft(right-left)下标所对应的数大于等于targ…...

7年经验之谈 —— Web测试是什么,有何特点?

Web测试是指对Web应用程序进行验证和评估的过程&#xff0c;以确保其功能、性能和安全性符合预期。 Web测试具体包括以下几个方面的内容&#xff1a; 功能测试&#xff1a;验证Web应用程序是否按照需求规格说明书中定义的功能正常工作。功能测试包括输入验证、表单提交、页面…...

【数据结构】前言概况 - 树

&#x1f6a9;纸上得来终觉浅&#xff0c; 绝知此事要躬行。 &#x1f31f;主页&#xff1a;June-Frost &#x1f680;专栏&#xff1a;数据结构 &#x1f525;该文章针对树形结构作出前言&#xff0c;以保证可以对树初步认知。 目录&#xff1a; &#x1f30d;前言:&#x1f3…...

MySQL——事务

一、事务的开始与结束 一个数据库事务由一条或多条sql语句构成&#xff0c;它们形成一个逻辑的工作单元。这些sql语句要么全部执行成功&#xff0c;要么全部执行失败。 1.1.事物的开始 1.对于DDL&#xff08;create&#xff0c;alter&#xff0c;drop&#xff09;和DCL&…...

虚拟机Ubuntu操作系统最基本终端命令(安装包+详细解释+详细演示)

虚拟机及乌班图&#xff08;Ubuntu操作系统&#xff09; 提示&#xff1a;大家需要软件的可以直接在此链接中提取 链接&#xff1a;https://pan.baidu.com/s/1_4VHGTlXjIuVhBINeOuBCA 提取码&#xff1a;nd0c 文章目录 虚拟机及乌班图&#xff08;Ubuntu操作系统&#xff09;终…...

Android 11.0 当系统内置两个Launcher时默认设置Launcher3以外的那个Launcher为默认Launcher

1.概述 在11.0定制化开发中,由于产品开发需要要求系统内置两个Launcher,一个是Launcher3,一个是自己开发的Launcher,当系统启动Launcher时, 不要弹出Launcher选择列表 选择哪个Launcher要求默认选择自己开发的Launcher作为默认Launcher,关于选择Launcher列表 其实都是在Res…...

NO5.心愿打印机

def light():#定义一个函数&#xff0c;以:结尾print(红灯2)#打印print(绿灯3)#打印 print(黄灯1)#和def顶格&#xff0c;先执行 light()#调用light函数【PDF转Word】 https://fzqxk86ywz.feishu.cn/sheets/GugIsI9zKhNaEwtJscbcgKFCn6b 【Fiddler汉化】 https://fzqxk86ywz.f…...

cudart.so vs cuda.so的区别

libcuda.so provides access to the CUDA driver API, whereas libcudart.so provides access to the CUDA runtime API. libcuda.so提供对CUDA驱动程序API的访问&#xff0c;而libcuart.so提供了对CUDA运行时API的访问。 在wsl中cuda.so位于/usr/lib/wsl/lib/libcuda.so 可以…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面&#xff0c;gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress&#xff0c;说明目标所使用的cms是wordpress&#xff0c;访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

OD 算法题 B卷【正整数到Excel编号之间的转换】

文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的&#xff1a;a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文通过代码驱动的方式&#xff0c;系统讲解PyTorch核心概念和实战技巧&#xff0c;涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...