Boon - 快速指南

Boon - 概述

Boon 是一个基于 Java 的 JSON 简单工具包。您可以使用 Boon JSON 以高效、快速的方式对 JSON 数据进行编码或解码。

Boon 的功能

Boon 的功能如下所述 −

  • 快速 − 与 Jackson 相比,Boon JSON 的对象序列化速度更快,支持 JSON 表达式和 JSON 解析。

  • 轻量级 − 它只有很少的类,并提供必要的功能,如编码/解码对象映射。

  • 数据绑定 −大多数操作都是使用数据绑定和索引覆盖完成的。

  • 没有公共树模型 − 最终用户视图是数据绑定视图。

  • 支持简单数据绑定 − 提供与原语的数据绑定以及自动装箱。

  • 高性能 − 使用基于堆的解析器并提供高性能。

  • 无依赖 − 无外部库依赖。可以独立包含。

  • 兼容 JDK1.2 − 源代码和二进制文件与 JDK1.2 兼容

Boon - 环境设置

在本章中,我们将了解 Boon 的本地环境设置以及如何为 Windows 2000/XP、Windows 95/98/ME 等设置 Boon 的路径。我们还将了解一些流行的 Java 编辑器以及如何下载 Boon 存档。

本地环境设置

如果您仍愿意为 Java 编程语言设置环境,那么本章将指导您如何在您的机器上下载和设置 Java。请按照下面提到的步骤设置环境。

Java SE 可从链接 www.oracle.com/java/technologies/oracle-java-archive-downloads.html 免费获得。因此,您可以根据您的操作系统下载一个版本。

按照说明下载 Java 并运行 .exe 以在您的机器上安装 Java。在计算机上安装 Java 后,您需要设置环境变量以指向正确的安装目录 −

Windows 2000/XP 的路径

我们假设您已将 Java 安装在 c:\Program Files\java\jdk 目录中 −

  • 右键单击"我的电脑"并选择"属性"

  • 单击"高级"选项卡下的"环境变量"按钮。

  • 现在,更改"路径"变量,使其也包含 Java 可执行文件的路径。例如,如果路径当前设置为 'C:\WINDOWS\SYSTEM32',则将路径更改为 'C:\WINDOWS\SYSTEM32;c:\Program Files\java\jdk\bin'

Windows 95/98/ME 的路径

我们假设您已在 c:\Program Files\java\jdk 目录中安装了 Java −

  • 编辑"C:\autoexec.bat"文件并在末尾添加以下行 − 'SET PATH=%PATH%;C:\Program Files\java\jdk\bin'

Linux、UNIX、Solaris、FreeBSD 的路径

应将环境变量 PATH 设置为指向 Java 二进制文件的安装位置。如果您在执行此操作时遇到问题,请参阅您的 shell 文档。

例如,如果您使用 bash 作为 shell,则应将以下行添加到".bashrc:export PATH=/path/to/java:$PATH"的末尾

流行的 Java 编辑器

要编写 Java 程序,您需要一个文本编辑器。市场上有许多复杂的 IDE。但目前,您可以考虑以下之一 −

  • 记事本 −在 Windows 机器上,您可以使用任何简单的文本编辑器,如 Notepad(本教程推荐使用)、TextPad。

  • Netbeans − 它是一个开源且免费的 Java IDE,可从 www.netbeans.org/index.html 下载。

  • Eclipse −它也是由 eclipse 开源社区开发的 Java IDE,可以从 www.eclipse.org 下载。

下载 Boon Archive

Maven Repository - Boon 下载最新版本的 Boon jar 文件。该版本位于 https://mvnrepository.com/artifact/io.fastjson/boon。在本教程中,下载 boon-0.34.jar 并将其复制到 C:\> boon 文件夹中。

OS Archive name
Windows boon-0.34.jar
Linux boon-0.34.jar
Mac boon-0.34.jar

设置 Boon 环境

设置 BOON 环境变量以指向 Boon jar 存储在您机器上的基本目录位置。假设,我们已经在各种操作系统的 Boon 文件夹中提取了 boon-0.34.jar,如下所示。

OS Output
Windows 将环境变量 BOON 设置为 C:\Boon
Linux export BOON=/usr/local/Boon
Mac export BOON=/Library/Boon

设置 CLASSPATH 变量

CLASSPATH 环境变量设置为指向 Boon jar 位置。假设您已将 boon-0.34.jar 存储在各种操作系统的 Boon 文件夹中,如下所示。

OS 输出
Windows 将环境变量 CLASSPATH 设置为 %CLASSPATH%;%Boon%\boon-0.34.jar;.;
Linux export CLASSPATH=$CLASSPATH:$BOON/boon-0.34.jar:.
Mac export CLASSPATH=$CLASSPATH:$BOON/boon-0.34.jar:.

Boon - 到对象

ObjectMapper 是 Boon 库的主要参与者类。ObjectMapper 类提供读写 JSON 的功能,既可以读写基本 POJO(普通旧式 Java 对象),也可以读写通用 JSON 树模型 (JsonNode),以及执行转换的相关功能。

它还具有高度可定制性,既可以处理不同风格的 JSON 内容,也可以支持更高级的对象概念,如多态性和对象身份。

示例

以下示例使用 ObjectMapper 类将 JSON 字符串解析为 Student 对象。

import org.boon.json.JsonFactory;
import org.boon.json.ObjectMapper;

public class BoonTester {
   public static void main(String args[]){
      ObjectMapper mapper = JsonFactory.create();
      String jsonString = "{\"name\":\"Mahesh\", \"age\":21}";

      Student student = mapper.readValue(jsonString, Student.class);
      System.out.println(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+ " ]";
   }
}

输出

输出如下所述 −

Student [ name: Mahesh, age: 21 ]

Boon - 到映射

ObjectMapper 类也可用于将 JSON 解析为 Map 对象,而不是 POJO 对象。

示例

以下示例是使用 ObjectMapper 类将 JSON 字符串解析为 Map 对象。

import java.util.Map;
import org.boon.json.JsonFactory;
import org.boon.json.ObjectMapper;

public class BoonTester {
   public static void main(String args[]) {
      ObjectMapper mapper = JsonFactory.create();
      String jsonString = "{\"name\":\"Mahesh\", \"age\":21}";
      Map studentMap = mapper.readValue(jsonString, Map.class);
      System.out.println("Name: " + studentMap.get("name"));
      System.out.println("Age: " + studentMap.get("age"));
   }
}

输出

输出如下所示 −

Name: Mahesh
Age: 21

Boon - 来源

ObjectMapper 类可用于解析来自不同来源的 json。它可以使用以下来源来解析 JSON。

  • 字节数组

  • 字符数组

  • 文件

  • 读取器类

  • 输入流类

  • 字符串

示例

以下示例使用 ObjectMapper 类将 JSON 字符数组解析为 Map 对象。

import java.util.Map;
import org.boon.json.JsonFactory;
import org.boon.json.ObjectMapper;

public class BoonTester {
   public static void main(String args[]){
      ObjectMapper mapper = JsonFactory.create();
      String jsonString = "{\"name\":\"Mahesh\", \"age\":21}";
      char[] jsonCharAray = jsonString.toCharArray();
      Map studentMap = mapper.readValue(jsonCharAray, Map.class);
      System.out.println("Name: " + studentMap.get("name"));
      System.out.println("Age: " + studentMap.get("age"));
   }
}

输出

您将看到以下输出 −

Name: Mahesh
Age: 21

Boon - 来自对象

ObjectMapper 类可用于从对象生成 JSON 字符串。

示例

以下示例使用 ObjectMapper 类从 Student 对象生成 JSON 字符串。

import org.boon.json.JsonFactory;
import org.boon.json.ObjectMapper;

public class BoonTester {
   public static void main(String args[]){
      ObjectMapper mapper = JsonFactory.create();      
      Student student = new Student("Mahesh", 21);
      String jsonString = mapper.writeValueAsString(student);
      System.out.println(jsonString);
   }
}
class Student {
   public String name;
   public int age;
   public Student(String name, int age) {
      this.name = name;
      this.age = age;
   }
}

Output

This produces the following output −

{"name":"Mahesh","age":21}

Boon - 来自 Map

ObjectMapper 类可用于从 Map 生成 JSON 字符串。

示例

以下示例使用 ObjectMapper 类从 Map 对象生成 JSON 字符串。

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.boon.json.JsonFactory;
import org.boon.json.ObjectMapper;

public class BoonTester {
   public static void main(String args[]){
      ObjectMapper mapper = JsonFactory.create();      
      Map<String, String> student = new HashMap<>();
      student.put("Name", "Mahesh");
      student.put("RollNo", "21");
      
      Map<String, String> student1 = new HashMap<>();
      student1.put("Name", "Suresh");
      student1.put("RollNo", "22");
      
      List<Map<String,String>> studentList = new ArrayList<>();
      studentList.add(student);
      studentList.add(student1);
      
      Map<String, List> studentMap = new HashMap<String, List>();
      studentMap.put("students", studentList);
      
      String jsonString = mapper.writeValueAsString(studentMap);
      System.out.println(jsonString);
   }
}

输出

执行上述代码时,您应该看到以下输出 −

{"students":[{"RollNo":"21","Name":"Mahesh"},{"RollNo":"22","Name":"Suresh"}]}

Boon - Long To Date

ObjectMapper 类可用于处理 JSON 中的不同日期格式。它可用于解析/生成长版本的日期。

示例

以下示例使用 ObjectMapper 类从长版本生成日期字符串。

import java.util.Date;
import org.boon.json.JsonFactory;
import org.boon.json.ObjectMapper;

public class BoonTester {
   public static void main(String args[]) {
      ObjectMapper mapper = JsonFactory.create();      
      String jsonString = "{\"name\":\"Mahesh\", \"age\":21, \"dateOfBirth\":976559400000}";
      
      //mapper 自动将 long 转换为 date
      Student student = mapper.readValue(jsonString, Student.class);
      System.out.println(student.dateOfBirth);    
      
      //默认情况下,映射器将日期转换为长整型
      jsonString = mapper.writeValueAsString(student);
      System.out.println(jsonString);    
   }
}
class Student {
   public String name;
   public int age;
   public Date dateOfBirth;
   
   public Student(String name, int age, Date dateOfBirth) {
      this.name = name;
      this.age = age;
      this.dateOfBirth = dateOfBirth;
   }
}

输出

下面给出了代码 − 的输出

Tue Dec 12 00:00:00 IST 2000
{"name":"Mahesh","age":21,"dateOfBirth":976559400000}

Boon - 字符串转日期

ObjectMapper 类可用于处理 JSON 中的不同日期格式。它可用于解析/生成日期的字符串版本。

示例

以下示例使用 ObjectMapper 类从字符串版本生成日期字符串。

import java.util.Date;
import org.boon.json.JsonFactory;
import org.boon.json.ObjectMapper;

public class BoonTester {
   public static void main(String args[]) {
      ObjectMapper mapper = JsonFactory.create();      
      String jsonString = "{\"name\":\"Mahesh\", \"age\":21, \"dateOfBirth\":\"1998-08-11T11:31:00.034Z\" }";
      
      // 映射器自动将字符串转换为日期
      Student student = mapper.readValue(jsonString, Student.class);
      System.out.println(student.dateOfBirth);    
      
      // 默认情况下,映射器将日期转换为长整型
      jsonString = mapper.writeValueAsString(student);
      System.out.println(jsonString);    
   }
}
class Student {
   public String name;
   public int age;
   public Date dateOfBirth;
   
   public Student(String name, int age, Date dateOfBirth) {
      this.name = name;
      this.age = age;
      this.dateOfBirth = dateOfBirth;
   }
}

输出

执行上述代码时,您应该看到以下输出 −

Tue Aug 11 17:01:00 IST 1998
{"name":"Mahesh","age":21,"dateOfBirth":902835060034}

Boon - 生成日期

ObjectMapper 类可用于处理 JSON 中的不同日期格式。它也可以用于生成日期对象。默认情况下,ObjectMapper 以长毫秒版本生成日期。使用 JsonFactory.createUseJSONDates() 方法返回的 ObjectMapper,我们可以在解析过程中获取日期的字符串版本。

示例

以下示例是使用 ObjectMapper 类通过解析 JSON 生成日期字符串。

import java.util.Date;
import org.boon.json.JsonFactory;
import org.boon.json.ObjectMapper;

public class BoonTester {
   public static void main(String args[]) {
      ObjectMapper mapper = JsonFactory.createUseJSONDates();     
      String jsonString = "{\"name\":\"Mahesh\", \"age\":21, \"dateOfBirth\":\"1998-08-11T11:31:00.034Z\" }";
      
      //mapper 自动将字符串转换为日期
      Student student = mapper.readValue(jsonString, Student.class);
      System.out.println(student.dateOfBirth);    
      
      //Mapper 现在将日期转换为日期字符串
      jsonString = mapper.writeValueAsString(student);
      System.out.println(jsonString);    
   }
}
class Student {
   public String name;
   public int age;
   public Date dateOfBirth;
   public Student(String name, int age, Date dateOfBirth) {
      this.name = name;
      this.age = age;
      this.dateOfBirth = dateOfBirth;
   }
}

输出

您将收到以下输出 −

Tue Aug 11 17:01:00 IST 1998
{"name":"Mahesh","age":21,"dateOfBirth":"1998-08-11T11:31:00.034Z"}

Boon - @JsonIgnore

@JsonIgnore 用于字段级别,以标记要忽略的属性或属性列表。

示例 - @JsonIgnore

以下示例适用于 @JsonIgnore −

import org.boon.json.JsonFactory;
import org.boon.json.ObjectMapper;
import org.boon.json.annotations.JsonIgnore;

public class BoonTester {
   public static void main(String args[]) {
      ObjectMapper mapper = JsonFactory.create();      
      Student student = new Student(1,11,"1ab","Mark");  
      String jsonString = mapper.writeValueAsString(student);
      System.out.println(jsonString);    
   }
}
class Student {
   public int id;
   @JsonIgnore
   public String systemId;
   public int rollNo;
   public String name;

   Student(int id, int rollNo, String systemId, String name) {
      this.id = id;
      this.systemId = systemId;
      this.rollNo = rollNo;
      this.name = name;
   }
}

输出

您将看到以下输出 −

{"id":1,"rollNo":11,"name":"Mark"}

Boon - @JsonInclude

@JsonInclude 用于包含具有 null/空或默认值的属性。默认情况下,Boon 在序列化/反序列化期间会忽略此类属性。

示例 - @JsonInclude

以下示例适用于 @JsonInclude −

import org.boon.json.JsonFactory;
import org.boon.json.ObjectMapper;
import org.boon.json.annotations.JsonInclude;

public class BoonTester {
   public static void main(String args[]) {
      ObjectMapper mapper = JsonFactory.createUseAnnotations( true );     
      Student student = new Student(1,null);  
      String jsonString = mapper.writeValueAsString(student);
      System.out.println(jsonString);    
   }
}
class Student {
   public int id; 
   @JsonInclude
   public String name;

   Student(int id, String name) {
      this.id = id;
      this.name = name;
   }
}

输出

脚本成功运行时,您将看到以下输出 −

{"id":1,"name":null}

Boon - @JsonViews

@JsonViews 用于控制是否序列化值。

示例 - @JsonView

以下示例适用于 @JsonView −

import org.boon.json.JsonSerializer;
import org.boon.json.JsonSerializerFactory;
import org.boon.json.annotations.JsonViews;

public class BoonTester {
   public static void main(String args[]) {
      JsonSerializer serializerPublic = new JsonSerializerFactory()
         .useAnnotations()
         .setView( "public" )
         .create();
      
      JsonSerializer serializerInternal = new JsonSerializerFactory()
         .useAnnotations()
         .setView( "internal" )
         .create();
      
      Student student = new Student(1,"Mark", 20);
      String jsonString = serializerPublic.serialize( student ).toString();
      System.out.println(jsonString);         
      jsonString = serializerInternal.serialize( student ).toString();
      System.out.println(jsonString);
   }
}
class Student {   
   public int id;   
   public String name;
   @JsonViews( ignoreWithViews = {"public"}, includeWithViews = {"internal"})
   public int age;

   Student(int id, String name, int age) {
      this.id = id;
      this.name = name;
      this.age = age;
   }
}

输出

我们将得到类似如下的输出 −

{"id":1,"name":"Mark"}
{"id":1,"name":"Mark","age":20}

Boon - @JsonProperty

@JsonProperty 用于标记与 json 属性相关的非标准 getter/setter 方法。

示例 - @JsonProperty

以下示例适用于 @JsonProperty −

import org.boon.json.JsonFactory;
import org.boon.json.ObjectMapper;
import org.boon.json.annotations.JsonProperty;

public class BoonTester {
   public static void main(String args[]) {
      ObjectMapper mapper = JsonFactory.create();     
      Student student = new Student(1);  
      String jsonString = mapper.writeValueAsString(student);
      System.out.println(jsonString);    
   }
}
class Student { 
   private int id;
   Student(){}
   Student(int id){
      this.id = id;
   }
   @JsonProperty("id")
   public int getTheId() {
      return id;
   }
   @JsonProperty("id")
   public void setTheId(int id) {
      this.id = id;
   }   
}

输出

执行后,您将收到以下输出 −

{"id":1}