当前位置: 首页 > 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` 方法。你可以根据你的实际需求修改代码以适应你的对象结构和命名规则。

http://www.lryc.cn/news/164167.html

相关文章:

  • 【LeetCode-中等题】90. 子集 II
  • Docker如何安装seafile
  • 注册法国商标的步骤和时间
  • 一起学数据结构(6)——栈和队列
  • 【数据结构】二叉树的顺序结构-堆
  • 2024年java面试--mysql(2)
  • IllegalArgumentException
  • Git 概述命令、idea中的使用
  • 单片机之硬件记录
  • QQ文件传输协议研究
  • Qt/C++音视频开发51-推流到各种流媒体服务程序
  • LeetCode 35. 搜索插入位置
  • 7年经验之谈 —— Web测试是什么,有何特点?
  • 【数据结构】前言概况 - 树
  • MySQL——事务
  • 虚拟机Ubuntu操作系统最基本终端命令(安装包+详细解释+详细演示)
  • Android 11.0 当系统内置两个Launcher时默认设置Launcher3以外的那个Launcher为默认Launcher
  • NO5.心愿打印机
  • cudart.so vs cuda.so的区别
  • Oracle集群管理-19C集群禁用numa和大页内存特性
  • 题目:2726.使用方法链的计算器
  • 基于ASP.NET的驾校管理系统设计与实现
  • 第一章 计算机系统概述 三、操作系统的发展与分类
  • 【2023年11月第四版教材】第12章《质量管理》(第二部分)
  • metinfo __ 6.0.0 __ file-read
  • 打造高效的私密论坛网站:Cpolar内网穿透+HadSky轻量级搭建指南
  • MediaCodec源码分析 configure流程
  • 借助ChatGPT使用Pandas实现Excel数据汇总
  • [学习笔记]PageRank算法
  • 【洛谷算法题】P5704-字母转换【入门1顺序结构】