实例解析Java的Jackson库中的数据绑定

 更新时间:2016年01月13日 11:26:00   投稿:goldensun  
这篇文章主要介绍了Java的Jackson库中的数据绑定,这里分为通常的简单数据绑定与全数据绑定两种情况来讲,需要的朋友可以参考下

数据绑定API用于JSON转换和使用属性访问或使用注解POJO(普通Java对象)。以下是它的两个类型。

简单数据绑定 - 转换JSON,从Java Maps, Lists, Strings, Numbers, Booleans 和 null 对象。

完整数据绑定 - 转换JSON到任何JAVA类型。我们将在下一章分别绑定。

ObjectMapper读/写JSON两种类型的数据绑定。数据绑定是最方便的方式是类似XML的JAXB解析器。

简单的数据绑定
简单的数据绑定是指JSON映射到Java核心数据类型。下表列出了JSON类型和Java类型之间的关系。

2016113113244100.png (629×269)

让我们来看看简单的数据操作绑定。在这里,我们将映射JAVA基本类型直接JSON,反之亦然。

创建一个名为JacksonTester在Java类文件在目录 C:\>Jackson_WORKSPACE.

File: JacksonTester.java

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;

public class JacksonTester {
  public static void main(String args[]){
   JacksonTester tester = new JacksonTester();
     try {
      ObjectMapper mapper = new ObjectMapper();

      Map<String,Object> studentDataMap = new HashMap<String,Object>(); 
      int[] marks = {1,2,3};

      Student student = new Student();
      student.setAge(10);
      student.setName("Mahesh");
      // JAVA Object
      studentDataMap.put("student", student);
      // JAVA String
      studentDataMap.put("name", "Mahesh Kumar");   
      // JAVA Boolean
      studentDataMap.put("verified", Boolean.FALSE);
      // Array
      studentDataMap.put("marks", marks);

      mapper.writeValue(new File("student.json"), studentDataMap);
      //result student.json
  //{ 
      //  "student":{"name":"Mahesh","age":10},
      //  "marks":[1,2,3],
      //  "verified":false,
      //  "name":"Mahesh Kumar"
      //}
      studentDataMap = mapper.readValue(new File("student.json"), Map.class);

      System.out.println(studentDataMap.get("student"));
      System.out.println(studentDataMap.get("name"));
      System.out.println(studentDataMap.get("verified"));
      System.out.println(studentDataMap.get("marks"));
   } catch (JsonParseException e) {
     e.printStackTrace();
   } catch (JsonMappingException e) {
     e.printStackTrace();
   } catch (IOException e) {
      e.printStackTrace();
   }
  }
}

class Student {
  private String name;
  private int age;
  public Student(){}
  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 toString(){
   return "Student [ name: "+name+", age: "+ age+ " ]";
  } 
}

验证结果

使用javac编译如下类:

复制代码 代码如下:

C:\Jackson_WORKSPACE>javac JacksonTester.java

现在运行jacksonTester看到的结果:
复制代码 代码如下:

C:\Jackson_WORKSPACE>java JacksonTester

验证输出结果

{name=Mahesh, age=10}
Mahesh Kumar
false
[1, 2, 3]

全数据绑定
完全数据绑定是指JSON映射到任何Java对象。

//Create an ObjectMapper instance
ObjectMapper mapper = new ObjectMapper(); 
//map JSON content to Student object
Student student = mapper.readValue(new File("student.json"), Student.class);
//map Student object to JSON content
mapper.writeValue(new File("student.json"), student);

让我们来看看简单的数据操作绑定。在这里,我们将直接映射Java对象到JSON,反之亦然。

创建一个名为JacksonTester在Java类文件目录 C:\>Jackson_WORKSPACE.

File: JacksonTester.java

import java.io.File;
import java.io.IOException;

import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;

public class JacksonTester {
  public static void main(String args[]){
   JacksonTester tester = new JacksonTester();
   try {
     Student student = new Student();
     student.setAge(10);
     student.setName("Mahesh");
     tester.writeJSON(student);

     Student student1 = tester.readJSON();
     System.out.println(student1);

   } catch (JsonParseException e) {
     e.printStackTrace();
   } catch (JsonMappingException e) {
     e.printStackTrace();
   } catch (IOException e) {
     e.printStackTrace();
   }
  }

  private void writeJSON(Student student) throws JsonGenerationException, JsonMappingException, IOException{
   ObjectMapper mapper = new ObjectMapper(); 
   mapper.writeValue(new File("student.json"), student);
  }

  private Student readJSON() throws JsonParseException, JsonMappingException, IOException{
   ObjectMapper mapper = new ObjectMapper();
   Student student = mapper.readValue(new File("student.json"), Student.class);
   return student;
  }
}

class Student {
  private String name;
  private int age;
  public Student(){}
  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 toString(){
   return "Student [ name: "+name+", age: "+ age+ " ]";
  } 
}

验证结果

使用javac编译如下类:

复制代码 代码如下:

C:\Jackson_WORKSPACE>javac JacksonTester.java

现在运行jacksonTester看到的结果:
复制代码 代码如下:

C:\Jackson_WORKSPACE>java JacksonTester

验证输出
复制代码 代码如下:

Student [ name: Mahesh, age: 10 ]

相关文章

  • 关于request.getRequestDispatcher().forward()的妙用及DispatcherType对Filter配置的影响

    关于request.getRequestDispatcher().forward()的妙用及DispatcherType

    这篇文章主要介绍了关于request.getRequestDispatcher().forward()的妙用及DispatcherType对Filter配置的影响,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • Mybatis集成Spring的实例代码_动力节点Java 学院整理

    Mybatis集成Spring的实例代码_动力节点Java 学院整理

    这篇文章主要介绍了Mybatis集成Spring的实例代码,需要的朋友可以参考下
    2017-09-09
  • Java如何基于okhttp请求SSE接口流式返回详解

    Java如何基于okhttp请求SSE接口流式返回详解

    对于流式返回,Spring Boot提供了两种不同的方式,下面这篇文章主要给大家介绍了关于Java如何基于okhttp请求SSE接口流式返回的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-03-03
  • Java如何获取HttpServletRequest请求参数

    Java如何获取HttpServletRequest请求参数

    我们常需要接口接收第三方推送的数据,由于第三方可能不具备开发能力,我们需要自行解析推送的数据格式,通过HttpServletRequest,我们可以解析字符串、JSON、XML以及文件等多种数据类型,本文介绍了如何在Java中使用HttpServletRequest获取请求参数,感兴趣的朋友一起看看吧
    2024-11-11
  • SpringBoot 2.x整合Log4j2日志的详细步骤

    SpringBoot 2.x整合Log4j2日志的详细步骤

    log4j2优越的性能其原因在于log4j2使用了LMAX,一个无锁的线程间通信库代替了,logback和log4j之前的队列,并发性能大大提升,下面这篇文章主要给大家介绍了关于SpringBoot 2.x整合Log4j2日志的相关资料,需要的朋友可以参考下
    2022-10-10
  • Java中对AtomicInteger和int值在多线程下递增操作的测试

    Java中对AtomicInteger和int值在多线程下递增操作的测试

    这篇文章主要介绍了Java中对AtomicInteger和int值在多线程下递增操作的测试,本文得出AtomicInteger操作 与 int操作的效率大致相差在50-80倍上下的结论,需要的朋友可以参考下
    2014-09-09
  • SpringBoot集成JWT实现Token登录验证的示例代码

    SpringBoot集成JWT实现Token登录验证的示例代码

    随着技术的发展,分布式web应用的普及,通过session管理用户登录状态成本越来越高,因此慢慢发展成为token的方式做登录身份校验,本文就来介绍一下SpringBoot集成JWT实现Token登录验证的示例代码,感兴趣的可以了解一下
    2023-12-12
  • 基于java解析JSON的三种方式详解

    基于java解析JSON的三种方式详解

    这篇文章主要介绍了基于java解析JSON的三种方式,结合实例形式详细分析了json解析的原理与GSON、FastJSON等常用解析操作技巧,需要的朋友可以参考下
    2016-12-12
  • 基于Spring MVC的文件上传和下载实现方法

    基于Spring MVC的文件上传和下载实现方法

    在Web应用程序中,文件上传和下载是常见的功能,Spring MVC框架提供了方便的方式来实现这些功能,本文将介绍如何使用Spring MVC实现文件上传和下载,需要的朋友可以参考下
    2023-05-05
  • mybatisplus 的SQL拦截器实现关联查询功能

    mybatisplus 的SQL拦截器实现关联查询功能

    大家都知道mybatisplus不支持关联查询,后来学习研究发现mybatisplus的SQL拦截器可以实现这一操作,下面小编给大家分享我的demo实现基本的关联查询功能没有问题,对mybatisplus关联查询相关知识感兴趣的朋友一起看看吧
    2021-06-06

最新评论