原文地址:

Create JSON by Jackson API

Jackson API is a multi-purpose Java library for processing JSON. Using Jackson API we can process as well produce JSON in different ways. In this article we will show how to use this Jackson API for creating JSON.

Maven Dependency:

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

Example 1:Jackson API to create JSON Array

package com.sample;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode; public class CreateJSON { public static void main(String[] args) throws JsonProcessingException { ObjectMapper mapper = new ObjectMapper(); ArrayNode arrayNode = mapper.createArrayNode(); /**
* Create three JSON Objects objectNode1, objectNode2, objectNode3
* Add all these three objects in the array
*/ ObjectNode objectNode1 = mapper.createObjectNode();
objectNode1.put("bookName", "Java");
objectNode1.put("price", "100"); ObjectNode objectNode2 = mapper.createObjectNode();
objectNode2.put("bookName", "Spring");
objectNode2.put("price", "200"); ObjectNode objectNode3 = mapper.createObjectNode();
objectNode3.put("bookName", "Liferay");
objectNode3.put("price", "500"); /**
* Array contains JSON Objects
*/
arrayNode.add(objectNode1);
arrayNode.add(objectNode2);
arrayNode.add(objectNode3); /**
* We can directly write the JSON in the console.
* But it wont be pretty JSON String
*/
System.out.println(arrayNode.toString()); /**
* To make the JSON String pretty use the below code
*/
System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(arrayNode)); } }

The above code will produce the below JSON

[
{
"bookName": "Java",
"price": "100"
},
{
"bookName": "Spring",
"price": "200"
},
{
"bookName": "Liferay",
"price": "500"
}
]

Example 2: Jackson API to create JSON Array inside JSON Array

package com.sample;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode; public class CreateJSON { public static void main(String[] args) throws JsonProcessingException { ObjectMapper mapper = new ObjectMapper(); ArrayNode arrayNode = mapper.createArrayNode(); /**
* Create three JSON Objects objectNode1, objectNode2, objectNode3, objectNode4
* Add all these three objects in the array
*/ ObjectNode objectNode1 = mapper.createObjectNode();
objectNode1.put("bookName", "Java");
objectNode1.put("price", "100"); ObjectNode objectNode2 = mapper.createObjectNode();
objectNode2.put("bookName", "Spring");
objectNode2.put("price", "200"); ObjectNode objectNode3 = mapper.createObjectNode();
objectNode3.put("bookName", "Liferay");
objectNode3.put("price", "500"); ArrayNode authorsArray = mapper.createArrayNode();
ObjectNode author1 = mapper.createObjectNode();
author1.put("firstName","Hamidul");
author1.put("middleName","");
author1.put("lastName","Islam"); ObjectNode author2 = mapper.createObjectNode();
author2.put("firstName","Richard");
author2.put("middleName","");
author2.put("lastName","Sezove"); authorsArray.add(author1);
authorsArray.add(author2); ObjectNode objectNode4 = mapper.createObjectNode();
objectNode4.putPOJO("authors", authorsArray); /**
* Array contains JSON Objects
*/
arrayNode.add(objectNode1);
arrayNode.add(objectNode2);
arrayNode.add(objectNode3);
arrayNode.add(objectNode4); /**
* We can directly write the JSON in the console.
* But it wont be pretty JSON String
*/
//System.out.println(arrayNode.toString()); /**
* To make the JSON String pretty use the below code
*/
System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(arrayNode)); } }

The above code will produce the below JSON String

[
{
"bookName": "Java",
"price": "100"
},
{
"bookName": "Spring",
"price": "200"
},
{
"bookName": "Liferay",
"price": "500"
},
{
"authors": [
{
"firstName": "Hamidul",
"middleName": "",
"lastName": "Islam"
},
{
"firstName": "Richard",
"middleName": "",
"lastName": "Sezove"
}
]
}
]

Example 3: Jackson API to convert Java Object to JSON

package com.sample.pojo;

import java.util.List;

public class Customer {
private String firstName;
private String middleName;
private String lastName;
private int age;
private List<String> contacts; public List<String> getContacts() {
return contacts;
} public void setContacts(List<String> contacts) {
this.contacts = contacts;
} public String getFirstName() {
return firstName;
} public void setFirstName(String firstName) {
this.firstName = firstName;
} public String getMiddleName() {
return middleName;
} public void setMiddleName(String middleName) {
this.middleName = middleName;
} public String getLastName() {
return lastName;
} public void setLastName(String lastName) {
this.lastName = lastName;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} }

Convert Customer to JSON

package com.sample;

import java.io.File;
import java.io.IOException;
import java.util.Arrays; import com.fasterxml.jackson.core.JsonGenerationException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.sample.pojo.Customer; public class ObjectToJSON { public static void main(String[] args) throws JsonGenerationException, JsonMappingException, IOException {
/**
* Mapper can be used to convert object to JSON
*/
ObjectMapper mapper = new ObjectMapper(); Customer customer = new Customer();
customer.setAge(29);
customer.setFirstName("Hamidul");
customer.setMiddleName("");
customer.setLastName("Islam");
customer.setContacts( Arrays.asList("8095185442", "9998887654", "1234567890")); /**
* Now we can create JSON from customer object
* Into different forms
* We can write in Console or we can create JSON as string
* Or we can write JSON in file also
* See all the examples below
*/ mapper.writeValue(System.out, customer); String jsonString = mapper.writeValueAsString(customer); mapper.writeValue(new File("customer.json"), customer); /**
* To pretty print the above JSON use the below code.
* Uncomment the below code to see the result
*/ /**mapper.writerWithDefaultPrettyPrinter().writeValue(System.out, customer); String prettyJson = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(customer); mapper.writerWithDefaultPrettyPrinter().writeValue(new File("customer.json"), customer);*/
} }

The above code will produce JSON as below

{
"firstName": "Hamidul",
"middleName": "",
"lastName": "Islam",
"age": 29,
"contacts": [
"8095185442",
"9998887654",
"1234567890"
]
}

Example 4: Use of @JsonIgnore to ignore property

Some times while converting java objects to json we may require certain properties to be ignored.

In that case we can use @JsonIgnore annotation. For example

package com.sample.pojo;

import java.util.List;

import com.fasterxml.jackson.annotation.JsonIgnore;

public class Customer {
private String firstName;
private String middleName;
private String lastName;
private int age;
private List<String> contacts; @JsonIgnore
private String country; @JsonIgnore
private String city; public String getCountry() {
return country;
} public void setCountry(String country) {
this.country = country;
} public String getCity() {
return city;
} public void setCity(String city) {
this.city = city;
} public List<String> getContacts() {
return contacts;
} public void setContacts(List<String> contacts) {
this.contacts = contacts;
} public String getFirstName() {
return firstName;
} public void setFirstName(String firstName) {
this.firstName = firstName;
} public String getMiddleName() {
return middleName;
} public void setMiddleName(String middleName) {
this.middleName = middleName;
} public String getLastName() {
return lastName;
} public void setLastName(String lastName) {
this.lastName = lastName;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} }

So while converting customer object to JSON, the property country and city will be ignored. 

Example 5: Ignore property in the runtime

 

In the example 4 we have shown how to ignore property by @JsonIgnore. This is static in nature. That means each and every time the property will be ignored while converting object to JSON. But in some cases we may need to ignore property in the runtime on the basis of some conditions.

package com.sample.pojo;

import java.util.List;

import com.fasterxml.jackson.annotation.JsonFilter;

@JsonFilter("com.sample.pojo.Customer")
public class Customer {
private String firstName;
private String middleName;
private String lastName;
private int age;
private List<String> contacts;
private String country;
private String city; public List<String> getContacts() {
return contacts;
} public void setContacts(List<String> contacts) {
this.contacts = contacts;
} public String getCountry() {
return country;
} public void setCountry(String country) {
this.country = country;
} public String getCity() {
return city;
} public void setCity(String city) {
this.city = city;
} public String getFirstName() {
return firstName;
} public void setFirstName(String firstName) {
this.firstName = firstName;
} public String getMiddleName() {
return middleName;
} public void setMiddleName(String middleName) {
this.middleName = middleName;
} public String getLastName() {
return lastName;
} public void setLastName(String lastName) {
this.lastName = lastName;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public Customer(String firstName, String middleName, String lastName,
int age) {
super();
this.firstName = firstName;
this.middleName = middleName;
this.lastName = lastName;
this.age = age;
} public Customer() { } }

Note: Give attention to @JsonFilter("com.sample.pojo.Customer"). Within double quote we can pass any valid string.

package com.sample;

import java.util.Arrays;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectWriter;
import com.fasterxml.jackson.databind.ser.FilterProvider;
import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter;
import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;
import com.sample.pojo.Customer; public class DynamicExclusionDemo { public static void main(String[] args) throws JsonProcessingException{ /**
* Create customer object
*/ Customer customer = new Customer();
customer.setAge(29);
customer.setFirstName("Hamidul");
customer.setMiddleName("");
customer.setLastName("Islam");
customer.setCountry("India");
customer.setCity("Bangalore");
customer.setContacts( Arrays.asList("8095185442", "9998887654", "1234567890")); /**
* Ignore city and country property
*/
String[] ignorableFieldNames = {"city","country"}; /**
* In the add filter pass com.sample.pojo.Customer
* Which is mentioned in the Customer class with @JsonFilter
*/
FilterProvider filters = new SimpleFilterProvider() .addFilter("com.sample.pojo.Customer", SimpleBeanPropertyFilter.serializeAllExcept(ignorableFieldNames)); ObjectMapper mapper = new ObjectMapper(); /**
* Pass the filter
*/
ObjectWriter writer = mapper.writer(filters); /**
* Convert Object to JSON
*/
String jsonString = writer.writeValueAsString(customer);
System.out.println(jsonString); }
}

The JSON output is below

最新文章

  1. angularjs中的filter(过滤器)——格式化日期的date
  2. java中cookie存取值
  3. Uml学习-用例建模简介
  4. mysql循环获取结果集
  5. 20.C#LINQ基础和简单使用(十一章11.1-11.2)
  6. js基础之BOM
  7. Java操作文件夹的工具类
  8. 超级终端和SecureCRT进行Console口的连接
  9. MemSQL Start[c]UP 2.0 - Round 2
  10. excel多个文件合并
  11. while if 循环判断
  12. 【Android Developers Training】 28. 将用户带领到另一个应用
  13. pycharm快捷键(转载)
  14. Swift中声明协议中的class关键字的作用
  15. 回文数(vector的使用)
  16. Python机器学习(python简介篇)
  17. 单行显示三级分销记录(同表自join)
  18. CSS设置浏览器滚动条样式
  19. Linux Shell 简介
  20. 基于Java的REST架构风格及接口安全性设计的讨论

热门文章

  1. MySQL GROUP BY语句
  2. Linux命令之du命令
  3. 关于导入geoserver 源码到Eclipse编译运行
  4. 当面试官问你GET和POST区别的时候,请这么回答.......
  5. Codeforces 242 E. XOR on Segment
  6. selenium 指定滚动到某个元素
  7. git difftool和mergetool图形化
  8. IPC 之 Binder 初识
  9. Spark强大的函数扩展功能
  10. HYPERSPECTRAL IMAGE CLASSIFICATION USING TWOCHANNEL DEEP CONVOLUTIONAL NEURAL NETWORK阅读笔记