简介

本文中,教大家如何使用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字段相关推荐

  1. java jsonalias_将多个JSON字段映射到单个Java字段

    简介 本文中,教大家如何使用Jackson和Gson将不同的JSON字段映射到单个Java字段中. Maven依赖 为了使用Jackson和Gson库,我们需要在POM中添加以下依赖项: com.go ...

  2. java postgresql json_java – 将PostgreSQL JSON列映射到Hibernate值类...

    See PgJDBC bug #265. PostgreSQL对数据类型转换过于严格,非常严格.它不会隐式地将文本转换为类似文本的值,例如xml和json. 解决此问题的严格正确方法是编写使用JDBC ...

  3. Java中普通字符串转json,老司机帮您java中如何将字符串转成json

    电脑现已成为我们工作.生活和娱乐必不可少的工具了,在使用电脑的过程中,可能会遇到java中如何将字符串转成json的问题,如果我们遇到了java中如何将字符串转成json的情况,该怎么处理怎么才能解决 ...

  4. java 编译文件 命令,CMD命令行编译运行单个java文件

    java文件中不含包名 这种情况比较简单 public class NoPackage{ public static void main(String[] args){ System.out.prin ...

  5. JSON解析基础使用知识-Java

    JSON解析基础使用知识 JSON格式 假设我们定义一本书 一本书有他的书名和内容,那么JSON数据如下 {"name":"诗经","info&quo ...

  6. javaweb中服务器响应,Java Web服务器响应与JSON

    我想创建一个简单的Java Web应用程序响应GET请求/用JSON字符串测试.Java Web服务器响应与JSON 我的环境是Java,Intellij和Tomcat 8.5.4. 到目前为止,我有 ...

  7. java文件编译_【java】javac编译多个有依赖关系的java文件为class文件

    历史文章: [javac命令不能使用,提示不是内部命令或外部命令,请查看历史文章] =================需求说明========================== 之前的文章中,仅说明 ...

  8. Mybatis实现存取Mysql的Json字段映射Java对象

    Mybatis实现存取Mysql的Json字段映射Java对象 一.需求 二.解决方案 一.需求 在业务比较复杂的项目模块,为了应对多样化的场景,我们通常会在mysql中采用json格式来存储相应的信 ...

  9. 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 ...

  10. java字段映射配置,mybati 字段映射

    Java中属性命名一般使用驼峰命名法,mysql中的字段一般使用"_"来连接两个单词.例如mysql中一般都是 admin_id 而不是adminId,java程序中在dao层定义 ...

最新文章

  1. IDEA键盘突然失去响应
  2. 2021-07-29 labelme注释、分类和Json文件转化(转化成彩图mask)
  3. OpenXml编程--去除自动生成的word文档中由分页符和换行符产生的空白页
  4. react使用引入svg的icon;svg图形制作
  5. 成功案例_网络营销成功案例分析
  6. c++ 反射_Java代码审计基础之反射
  7. How-to-quick-getting-started-for-Frontend
  8. 循环队列(循环数组)中元素个数的计算
  9. VUE3.x(v-for)循环遍历指令
  10. 那年学过的Java笔记三核心类库三
  11. Node.js 用户注册功能的实现
  12. HashSet、LinkedHashSet、TreeSet的内部实现简介
  13. centos 7增强命令补全
  14. rhel5编译安装2.6.29.2内核
  15. 项目管理软件 OpenProj
  16. 电脑word文档页眉的横线怎么去掉
  17. 三菱凌云3故障代码_三菱.凌云故障代码
  18. 安卓期末作品小项目_《去月球》电影版今年上映;电子竞技入选亚室会正式比赛项目...
  19. carte集群的搭建笔记
  20. 【小甲鱼编程题05】打印杨辉三角形

热门文章

  1. java学生管理系统,(史上最全)
  2. 完美破解nbsp;iPhone“一键解锁”新手教程
  3. The Things Network LoRaWAN Stack V3 学习笔记 2.6 新增一个 CN470 子频段
  4. 屏幕尺寸、分辨率、DPI、PPI
  5. 走进WPF之开发类似Visio软件
  6. 推荐几个代码静态分析工具
  7. 网页版模仿Excel
  8. 通过注册表修改键盘映射
  9. s7200cpu224xp手册_西门子S7-200 CPU224XP
  10. 企业财务分析一头雾水?有了这个财务报表工具,问题一键解决