动态封装对象,属性来自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` 方法。你可以根据你的实际需求修改代码以适应你的对象结构和命名规则。

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

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

相关文章

使用内网端口映射方案,轻松实现U8用友ERP的本地部署异地远程访问——“cpolar内网穿透”

文章目录 前言1. 服务器本机安装U8并调试设置2. 用友U8借助cpolar实现企业远程办公2.1 在被控端电脑上&#xff0c;点击开始菜单栏&#xff0c;打开设置——系统2.2 找到远程桌面2.3 启用远程桌面 3. 安装cpolar内网穿透3.1 注册cpolar账号3.2 下载cpolar客户端 4. 获取远程桌面…

排序算法概述

1、数据排序&#xff1a; 将一个文件的记录按关键字不减&#xff08;或不增&#xff09;次序排列&#xff0c;使文件成为有序文件&#xff0c;此过程称为排序。 2、排序的稳定性&#xff1a; 稳定排序&#xff1a; 若排序后&#xff0c;相同关键字的记录保持它们原来的相对次序…

机器学习笔记之最优化理论与方法(九)无约束优化问题——常用求解方法(下)

机器学习笔记之最优化理论与方法——基于无约束优化问题的常用求解方法[下] 引言回顾&#xff1a;经典牛顿法的缺陷与拟牛顿法思想经典牛顿法缺陷与修正牛顿法拟牛顿法与矩阵 B k 1 \mathcal B_{k1} Bk1​的选择 拟牛顿法之 DFP \text{DFP} DFP方法 DFP \text{DFP} DFP迭代公式…

探索装饰艺术的未来,留存传统的精髓

近一个世纪后&#xff0c;装饰艺术终于卷土重来。正如我们在全球新的项目、室内空间和家具中所看到的&#xff0c;那种令我们渴望20世纪初20年代繁荣时期的奢华和魅力。作为装饰艺术建筑和设计的独特身份一直在世界上继续启发着人们&#xff0c;那么从新的设计和现有设计的保留…

从零基础到精通Flutter开发:一步步打造跨平台应用

&#x1f482; 个人网站:【工具大全】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 导言 Flutter是一种流行…

【RocketMQ】消息的拉取

在上一讲中&#xff0c;介绍了消息的存储&#xff0c;生产者向Broker发送消息之后&#xff0c;数据会写入到CommitLog中&#xff0c;这一讲&#xff0c;就来看一下消费者是如何从Broker拉取消息的。 RocketMQ消息的消费以组为单位&#xff0c;有两种消费模式&#xff1a; 广播…

如何使用SQL系列 之 如何在MySQL中使用存储过程

引言 通常&#xff0c;当使用关系型数据库时&#xff0c;你直接在应用程序代码中发出单独的结构化查询语言(SQL)查询来检索或操作数据&#xff0c;如SELECT、INSERT、UPDATE或DELETE。这些语句直接作用于并操作底层数据库表。如果相同的语句或一组语句中使用多个应用程序访问同…

Element Plus table formatter函数返回html内容

查看 Element Plus table formatter 支持返回 类型为string 和 VNode对象&#xff1b; 若依全局直接用h函数&#xff0c;无需引用 下面普通基本用法&#xff1a;在Element Plus中&#xff0c;你可以使用自定义的formatter函数来返回VNode对象&#xff0c;从而实现更灵活的自定…

RabbitMQ基本概念和工作原理

目录 RabbitMQ的基本概念 RabbitMQ的工作原理 RabbitMQ的交换机类型 RabbitMQ的实现原理 RabbitMQ的消息确认机制 RabbitMQ的消息持久化机制 RabbitMQ的事务 RabbitMQ的消息分发流程 RabbitMQ的消息分发机制 RabbitMQ实现RPC的机制 RabbitMQ的基本概念 RabbitMQ是一…

uni-app vuex全局计时

功能需求&#xff0c;在A页面进入时候开始计时中间会去到B页面查看数据&#xff0c;但是并没有销毁当前页面&#xff0c;所以计时一直在&#xff0c;直到在B页面提交数据&#xff0c;才结束计时 在根文件夹创建 store文件夹&#xff0c;同时创建index.js文件import Vue from v…

Navicat连接mysql8.0:提示无法加载身份验证插件“caching_sha2_password”

Navicat连接mysql时&#xff0c;提示&#xff1a;Unable to load authentication plugin ‘caching_sha2_password‘. 原因&#xff1a;mysql 8.0 默认使用 caching_sha2_password 身份验证机制。 D:\MySQL8.0\install\bin>mysql -uroot -p123456789 #登录 mysql: [War…

《动手学深度学习 Pytorch版》 4.10 实战Kaggle比赛:预测比赛

4.10.1 下载和缓存数据集 import hashlib import os import tarfile import zipfile import requests#save DATA_HUB dict() DATA_URL http://d2l-data.s3-accelerate.amazonaws.com/def download(name, cache_diros.path.join(.., data)): #save"""下载一个…

【Express.js】代码规范

代码规范 编程规范&#xff0c;对于一个优秀的项目是不可或缺的&#xff0c;有了良好的代码规范&#xff0c;有益于项目的维护与拓展。 命名规范 命名的第一要义是明了&#xff0c;要让阅读者看到命名就能大概猜测出其意义或用处。 以用户身份&#xff08;userRole&#xff…

Pyramid Scene Parsing Network–CVPR,2017论文解读及其pytorch代码

文章目录 Pyramid Scene Parsing Network--CVPR&#xff0c;2017一、背景介绍二、网络结构和优化方法三、实验结果 Pyramid Scene Parsing Network–CVPR&#xff0c;2017 Github代码链接 一、背景介绍 现阶段随着数据集制作精细化、标签种类变多、具有语义相似标签等导致出…

Jtti:Linux如何开机启动bootstrap

在Linux中&#xff0c;"bootstrap"通常不是一个单独的启动项&#xff0c;而是指引导过程的一部分。引导过程涉及到启动引导加载程序&#xff0c;加载内核&#xff0c;初始化系统并启动各种服务。启动过程中不会直接启动"bootstrap"&#xff0c;而是通过引导…

docker 网络模式 与 ftp 主动模式与被动模式

前言 在软件开发的过程中要访问ftp上传和下载文件&#xff0c;本地环境测试可以顺利访问ftp文件服务完成文件上传和下载的过程&#xff0c;但是发布到显示生产环境&#xff0c;通过docker容器化部署&#xff0c;无法访问ftp文件服务器。要理解产生这种问题的原因就需要理解doc…

DataX实现Mysql与ElasticSearch(ES)数据同步

文章目录 一、Linux环境要求二、准备工作2.1 Linux安装jdk2.2 linux安装python2.3 下载DataX&#xff1a; 三、DataX压缩包导入&#xff0c;解压缩四、编写同步Job五、执行Job六、定时更新6.1 创建定时任务6.2 提交定时任务6.3 查看定时任务 七、增量更新思路 一、Linux环境要求…

PDFBOX和ASPOSE.PDF

一、aspose.pdf 文档 https://docs.aspose.com/pdf/java/ 1、按段落分段 /*** docx文本按段分段*/ public static void main(String[] args) {int i 1;try {// 打开文件流FileInputStream file new FileInputStream("I:\\范文.docx");// 创建 Word 文档对象XWPFDo…

实时显示当前文件夹下的文件大小,shell脚本实现

图片来源于网络&#xff0c;如果侵权请联系博主删除&#xff01; 需求&#xff1a; 写一个shell终端命令&#xff0c;实时显示当前文件夹下的文件大小 实现&#xff1a; 您可以使用以下的Shell脚本命令来实时显示当前文件夹下的文件大小&#xff1a; while true; docleardu …

2023-亲测有效-git clone失败怎么办?用代理?加git?

git 克隆不下来&#xff0c;超时 用以下格式&#xff1a; git clone https://ghproxy.com/https://github.com/Tencent/ncnn.git 你的网站前面加上 https://ghproxy.com/ 刷的一下就下完了&#xff01;&#xff01;