Java - Jackson JSON Java Parser API

简介: Java - Jackson JSON Java Parser API

20210331002245740.png

概述


Jackson JSON Java Parser非常流行,并且也用于Spring框架。

Jackson JSON Parser API提供了将JSON转换为POJO对象的简便方法,并支持从JSON数据轻松转换为Map。

Jackson也支持泛型,并直接将它们从JSON转换为对象。


依赖

要在我们的项目中使用Jackson JSON Java API,我们可以将其添加到项目构建路径中

<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>2.2.3</version>
</dependency>


jackson-databind jar依赖于jackson-core和jackson-annotations库,因此,如果直接将它们添加到构建路径,请确保将所有三个添加在一起,否则会出现运行时错误。


Jackson JSON示例

基础数据


对于从JSON到POJO / Java对象转换的示例,我们将使用一个嵌套对象和数组的复杂示例。、

我们将在Java对象中使用数组,列表和Map进行转换。 json存储在文件employee.txt中,其结构如下

{
  "id": 123,
  "name": "Pankaj",
  "permanent": true,
  "address": {
    "street": "Albany Dr",
    "city": "San Jose",
    "zipcode": 95129
  },
  "phoneNumbers": [
    123456,
    987654
  ],
  "role": "Manager",
  "cities": [
    "Los Angeles",
    "New York"
  ],
  "properties": {
    "age": "29 years",
    "salary": "1000 USD"
  }
}


有以下与json数据相对应的java类。

【Address 】

public class Address {
  private String street;
  private String city;
  private int zipcode;
  public String getStreet() {
    return street;
  }
  public void setStreet(String street) {
    this.street = street;
  }
  public String getCity() {
    return city;
  }
  public void setCity(String city) {
    this.city = city;
  }
  public int getZipcode() {
    return zipcode;
  }
  public void setZipcode(int zipcode) {
    this.zipcode = zipcode;
  }
  @Override
  public String toString(){
    return getStreet() + ", "+getCity()+", "+getZipcode();
  }


【Employee 】

import java.util.Arrays;
import java.util.List;
import java.util.Map;
public class Employee {
  private int id;
  private String name;
  private boolean permanent;
  private Address address;
  private long[] phoneNumbers;
  private String role;
  private List<String> cities;
  private Map<String, String> properties;
  public int getId() {
    return id;
  }
  public void setId(int id) {
    this.id = id;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public boolean isPermanent() {
    return permanent;
  }
  public void setPermanent(boolean permanent) {
    this.permanent = permanent;
  }
  public Address getAddress() {
    return address;
  }
  public void setAddress(Address address) {
    this.address = address;
  }
  public long[] getPhoneNumbers() {
    return phoneNumbers;
  }
  public void setPhoneNumbers(long[] phoneNumbers) {
    this.phoneNumbers = phoneNumbers;
  }
  public String getRole() {
    return role;
  }
  public void setRole(String role) {
    this.role = role;
  }
  public List<String> getCities() {
    return cities;
  }
  public void setCities(List<String> cities) {
    this.cities = cities;
  }
  public Map<String, String> getProperties() {
    return properties;
  }
  public void setProperties(Map<String, String> properties) {
    this.properties = properties;
  }
  @Override
  public String toString(){
    StringBuilder sb = new StringBuilder();
    sb.append("***** Employee Details *****\n");
    sb.append("ID="+getId()+"\n");
    sb.append("Name="+getName()+"\n");
    sb.append("Permanent="+isPermanent()+"\n");
    sb.append("Role="+getRole()+"\n");
    sb.append("Phone Numbers="+Arrays.toString(getPhoneNumbers())+"\n");
    sb.append("Address="+getAddress()+"\n");
    sb.append("Cities="+Arrays.toString(getCities().toArray())+"\n");
    sb.append("Properties="+getProperties()+"\n");
    sb.append("*****************************");
    return sb.toString();
  }
}

Employee是代表根json对象的Java bean。现在,让我们看看如何使用Jackson JSON解析器API将JSON转换为Java对象


JSON转换为Java对象


import java.io.File;
import java.io.IOException;
import java.io.StringWriter;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.journaldev.jackson.model.Address;
import com.journaldev.jackson.model.Employee;
public class JacksonObjectMapperExample {
  public static void main(String[] args) throws IOException {
    //read json file data to String
    byte[] jsonData = Files.readAllBytes(Paths.get("employee.txt"));
    //create ObjectMapper instance
    ObjectMapper objectMapper = new ObjectMapper();
    //convert json string to object
    Employee emp = objectMapper.readValue(jsonData, Employee.class);
    System.out.println("Employee Object\n"+emp);
    //convert Object to json string
    Employee emp1 = createEmployee();
    //configure Object mapper for pretty print
    objectMapper.configure(SerializationFeature.INDENT_OUTPUT, true);
    //writing to console, can write to any output stream such as file
    StringWriter stringEmp = new StringWriter();
    objectMapper.writeValue(stringEmp, emp1);
    System.out.println("Employee JSON is\n"+stringEmp);
  }
  public static Employee createEmployee() {
    Employee emp = new Employee();
    emp.setId(100);
    emp.setName("David");
    emp.setPermanent(false);
    emp.setPhoneNumbers(new long[] { 123456, 987654 });
    emp.setRole("Manager");
    Address add = new Address();
    add.setCity("Bangalore");
    add.setStreet("BTM 1st Stage");
    add.setZipcode(560100);
    emp.setAddress(add);
    List<String> cities = new ArrayList<String>();
    cities.add("Los Angeles");
    cities.add("New York");
    emp.setCities(cities);
    Map<String, String> props = new HashMap<String, String>();
    props.put("salary", "1000 Rs");
    props.put("age", "28 years");
    emp.setProperties(props);
    return emp;
  }
}


输出

Employee Object
***** Employee Details *****
ID=123
Name=Pankaj
Permanent=true
Role=Manager
Phone Numbers=[123456, 987654]
Address=Albany Dr, San Jose, 95129
Cities=[Los Angeles, New York]
Properties={age=29 years, salary=1000 USD}
*****************************
Employee JSON is
//printing same as above json file data


com.fasterxml.jackson.databind.ObjectMapper是Jackson API中最重要的类,它提供readValue()和writeValue()方法以将JSON转换为Java Object以及将Java Object转换为JSON。


ObjectMapper类可以重用,并且可以将其作为Singleton对象初始化一次。有很多重载版本的readValue()和writeValue()方法可用于字节数组,File,输入/输出流和Reader / Writer对象。


Jackson JSON –将JSON转换为Map


在data.txt文件中有一个如下所示的JSON对象:


{
  "name": "David",
  "role": "Manager",
  "city": "Los Angeles"
}


2.2 Jackson JSON –读取特定的JSON密钥

2.3 Jackson JSON –编辑JSON文档

2.4 Jackson JSON流API示例

相关文章
|
2月前
|
Java API Maven
如何使用Java开发抖音API接口?
在数字化时代,社交媒体平台如抖音成为生活的重要部分。本文详细介绍了如何用Java开发抖音API接口,从创建开发者账号、申请API权限、准备开发环境,到编写代码、测试运行及注意事项,全面覆盖了整个开发流程。
229 10
|
2月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
87 2
|
30天前
|
JSON Java 数据格式
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
85 25
java操作http请求针对不同提交方式(application/json和application/x-www-form-urlencoded)
|
12天前
|
JSON Java Apache
Java基础-常用API-Object类
继承是面向对象编程的重要特性,允许从已有类派生新类。Java采用单继承机制,默认所有类继承自Object类。Object类提供了多个常用方法,如`clone()`用于复制对象,`equals()`判断对象是否相等,`hashCode()`计算哈希码,`toString()`返回对象的字符串表示,`wait()`、`notify()`和`notifyAll()`用于线程同步,`finalize()`在对象被垃圾回收时调用。掌握这些方法有助于更好地理解和使用Java中的对象行为。
|
17天前
|
JSON API 数据格式
淘系等商品评论Json数据格式参考,API接口测试
通过以上示例和说明,你可以了解淘系商品评论的JSON数据结构和如何使用相关API接口获取评论数据。在实际操作中,你需要参考具体的API接口文档和开放平台的相关说明进行配置和调用。
|
2月前
|
JSON Java 关系型数据库
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
在Java中,使用mybatis-plus更新实体类对象到mysql,其中一个字段对应数据库中json数据类型,更新时报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
118 4
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
|
27天前
|
算法 Java API
如何使用Java开发获得淘宝商品描述API接口?
本文详细介绍如何使用Java开发调用淘宝商品描述API接口,涵盖从注册淘宝开放平台账号、阅读平台规则、创建应用并申请接口权限,到安装开发工具、配置开发环境、获取访问令牌,以及具体的Java代码实现和注意事项。通过遵循这些步骤,开发者可以高效地获取商品详情、描述及图片等信息,为项目和业务增添价值。
57 10
|
1月前
|
存储 Java 数据挖掘
Java 8 新特性之 Stream API:函数式编程风格的数据处理范式
Java 8 引入的 Stream API 提供了一种新的数据处理方式,支持函数式编程风格,能够高效、简洁地处理集合数据,实现过滤、映射、聚合等操作。
57 6
|
1月前
|
Java API 开发者
Java中的Lambda表达式与Stream API的协同作用
在本文中,我们将探讨Java 8引入的Lambda表达式和Stream API如何改变我们处理集合和数组的方式。Lambda表达式提供了一种简洁的方法来表达代码块,而Stream API则允许我们对数据流进行高级操作,如过滤、映射和归约。通过结合使用这两种技术,我们可以以声明式的方式编写更简洁、更易于理解和维护的代码。本文将介绍Lambda表达式和Stream API的基本概念,并通过示例展示它们在实际项目中的应用。
|
2月前
|
安全 Java API
告别SimpleDateFormat:Java 8日期时间API的最佳实践
在Java开发中,处理日期和时间是一个基本而重要的任务。传统的`SimpleDateFormat`类因其简单易用而被广泛采用,但它存在一些潜在的问题,尤其是在多线程环境下。本文将探讨`SimpleDateFormat`的局限性,并介绍Java 8引入的新的日期时间API,以及如何使用这些新工具来避免潜在的风险。
40 5

热门文章

最新文章