java jsonproperty_将多个JSON字段映射到单个Java字段
简介
本文中,教大家如何使用Jackson和Gson将不同的JSON字段映射到单个Java字段中。
Maven依赖
为了使用Jackson和Gson库,我们需要在POM中添加以下依赖项:
com.google.code.gson
gson
2.8.5
test
com.fasterxml.jackson.core
jackson-databind
2.9.8
test
示例JSON
假如,我们希望将不同位置的天气细节输入到我们的Java类中。我们发现了一些将天气数据发布为JSON文档的网站。但是,它们的格式并未是一致的
{
"location": "广州",
"temp": 15,
"weather": "多云"
}
{
"place": "深圳",
"temperature": 35,
"outlook": "晴天"
}
我们希望将这两种格式反序列化为同一个Java类,名为 Weather:
使用Jackson
为实现这一目标,我们将使用Jackson的@JsonProperty和@JsonAlias注释。这两个注解将帮助我们把JSON属性映射到同一Java字段。
首先,我们将使用@JsonProperty注释,以便让Jackson知道要映射的JSON字段的名称。在值@JsonProperty注解同时用于反序列化和序列化。
然后我们可以使用@JsonAlias注释。因此,Jackson将知道JSON文档中映射到Java字段的其他字段的名称。在用了@JsonAlias注释的属性用于反序列化。
@JsonProperty("location")
@JsonAlias("place")
private String location;
@JsonProperty("temp")
@JsonAlias("temperature")
private int temp;
@JsonProperty("outlook")
@JsonAlias("weather")
private String outlook;
Getter、Setter忽略
现在我们已经添加了注释,让我们使用Jackson的ObjectMapper方法创建Weather对象。
@Test
public void test() throws Exception {
ObjectMapper mapper = new ObjectMapper();
Weather weather = mapper.readValue("{\n"
+ " \"location\": \"广州\",\n"
+ " \"temp\": 15,\n"
+ " \"weather\": \"多云\"\n"
+ "}", Weather.class);
TestCase.assertEquals("广州", weather.getLocation());
TestCase.assertEquals("多云", weather.getOutlook());
TestCase.assertEquals(15, weather.getTemp());
weather = mapper.readValue("{\n"
+ " \"place\": \"深圳\",\n"
+ " \"temperature\": 35,\n"
+ " \"outlook\": \"晴天\"\n"
+ "}", Weather.class);
TestCase.assertEquals("深圳", weather.getLocation());
TestCase.assertEquals("晴天", weather.getOutlook());
TestCase.assertEquals(35, weather.getTemp());
}
使用Gson
现在,我们来看看Gson如何实现。我们需要在@SerializedName注释中使用值和 备用参数。
第一个将用作默认值,而第二个将用于指示我们要映射的JSON字段的备用名称:
@SerializedName(value="location", alternate="place")
private String location;
@SerializedName(value="temp", alternate="temperature")
private int temp;
@SerializedName(value="outlook", alternate="weather")
private String outlook;
现在我们已经添加了注释,让我们测试一下我们的例子:
@Test
public void test() throws Exception {
Gson gson = new GsonBuilder().create();
Weather weather = gson.fromJson("{\n"
+ " \"location\": \"广州\",\n"
+ " \"temp\": 15,\n"
+ " \"weather\": \"多云\"\n"
+ "}", Weather.class);
TestCase.assertEquals("广州", weather.getLocation());
TestCase.assertEquals("多云", weather.getOutlook());
TestCase.assertEquals(15, weather.getTemp());
weather = gson.fromJson("{\n"
+ " \"place\": \"深圳\",\n"
+ " \"temperature\": 35,\n"
+ " \"outlook\": \"晴天\"\n"
+ "}", Weather.class);
TestCase.assertEquals("深圳", weather.getLocation());
TestCase.assertEquals("晴天", weather.getOutlook());
TestCase.assertEquals(35, weather.getTemp());
}
结论
我们通过使用Jackson的@JsonAlias或Gson的替代参数看到了这一点,我们可以轻松地将不同的JSON格式转换为相同的Java对象。
java jsonproperty_将多个JSON字段映射到单个Java字段相关推荐
- java jsonalias_将多个JSON字段映射到单个Java字段
简介 本文中,教大家如何使用Jackson和Gson将不同的JSON字段映射到单个Java字段中. Maven依赖 为了使用Jackson和Gson库,我们需要在POM中添加以下依赖项: com.go ...
- java postgresql json_java – 将PostgreSQL JSON列映射到Hibernate值类...
See PgJDBC bug #265. PostgreSQL对数据类型转换过于严格,非常严格.它不会隐式地将文本转换为类似文本的值,例如xml和json. 解决此问题的严格正确方法是编写使用JDBC ...
- Java中普通字符串转json,老司机帮您java中如何将字符串转成json
电脑现已成为我们工作.生活和娱乐必不可少的工具了,在使用电脑的过程中,可能会遇到java中如何将字符串转成json的问题,如果我们遇到了java中如何将字符串转成json的情况,该怎么处理怎么才能解决 ...
- java 编译文件 命令,CMD命令行编译运行单个java文件
java文件中不含包名 这种情况比较简单 public class NoPackage{ public static void main(String[] args){ System.out.prin ...
- JSON解析基础使用知识-Java
JSON解析基础使用知识 JSON格式 假设我们定义一本书 一本书有他的书名和内容,那么JSON数据如下 {"name":"诗经","info&quo ...
- javaweb中服务器响应,Java Web服务器响应与JSON
我想创建一个简单的Java Web应用程序响应GET请求/用JSON字符串测试.Java Web服务器响应与JSON 我的环境是Java,Intellij和Tomcat 8.5.4. 到目前为止,我有 ...
- java文件编译_【java】javac编译多个有依赖关系的java文件为class文件
历史文章: [javac命令不能使用,提示不是内部命令或外部命令,请查看历史文章] =================需求说明========================== 之前的文章中,仅说明 ...
- Mybatis实现存取Mysql的Json字段映射Java对象
Mybatis实现存取Mysql的Json字段映射Java对象 一.需求 二.解决方案 一.需求 在业务比较复杂的项目模块,为了应对多样化的场景,我们通常会在mysql中采用json格式来存储相应的信 ...
- oracle 代码 字段映射,将ORACLE TIMESTAMP(9)字段映射到java.util.Date
存在将ORACLE TIMESTAMP(9)字段映射到Java中的java.sql.Timestamp或java.util.Date的问题 ojdbc 11.2.0.1. 0 休眠的注解3.3.1.G ...
- java字段映射配置,mybati 字段映射
Java中属性命名一般使用驼峰命名法,mysql中的字段一般使用"_"来连接两个单词.例如mysql中一般都是 admin_id 而不是adminId,java程序中在dao层定义 ...
最新文章
- IDEA键盘突然失去响应
- 2021-07-29 labelme注释、分类和Json文件转化(转化成彩图mask)
- OpenXml编程--去除自动生成的word文档中由分页符和换行符产生的空白页
- react使用引入svg的icon;svg图形制作
- 成功案例_网络营销成功案例分析
- c++ 反射_Java代码审计基础之反射
- How-to-quick-getting-started-for-Frontend
- 循环队列(循环数组)中元素个数的计算
- VUE3.x(v-for)循环遍历指令
- 那年学过的Java笔记三核心类库三
- Node.js 用户注册功能的实现
- HashSet、LinkedHashSet、TreeSet的内部实现简介
- centos 7增强命令补全
- rhel5编译安装2.6.29.2内核
- 项目管理软件 OpenProj
- 电脑word文档页眉的横线怎么去掉
- 三菱凌云3故障代码_三菱.凌云故障代码
- 安卓期末作品小项目_《去月球》电影版今年上映;电子竞技入选亚室会正式比赛项目...
- carte集群的搭建笔记
- 【小甲鱼编程题05】打印杨辉三角形