在Java項目中將一個對象轉換成一段Json格式的字符串是很是常見的,可以實現這種需求的工具包也比較多,例如Gson、JSON-lib、Jackson等等。本文主要介紹Jackson的使用,Jackson除了能實現Java對象與Json串的互轉外,還能將Java對象轉換爲Xml格式,使用較爲簡單並且聽說效率比較高。
對於Jackson的jar包咱們能夠從maven資源庫中下載:http://mvnrepository.com/css
所需jar包以下,按照名稱搜索下載便可。java
接下來編寫測試用例,咱們須要一個java類:json
package com.csii.jackson.object;
public class Book{
private String name;
private int price;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public Book() {
}
public Book(String name,int price) {
this.name = name;
this.price = price;
}
@Override
public String toString() {
return "name:" + name +"; price:" + price;
}
}
1.將Java對象轉換爲Json字符串:markdown
@Test
public void testGenJson()
{
ObjectMapper objMapper = new ObjectMapper();
Book book = new Book("Think in Java",100);
try {
jsonGen = objMapper.getJsonFactory().createJsonGenerator(System.out,JsonEncoding.UTF8);
jsonGen.writeObject(book);
} catch (IOException e) {
e.printStackTrace();
}
}
運行測試方法,控制檯輸出:app
{"name":"Think in Java","price":100}
2.將Json字符串轉爲Java對象:maven
/* * Json轉Java對象 */
@Test
public void testGenObjByJson()
{
ObjectMapper objMapper = new ObjectMapper();
String json = "{\"name\":\"Think in Java\",\"price\":100}";
try {
Book book = objMapper.readValue(json, Book.class);
System.out.println(book);
} catch (IOException e) {
e.printStackTrace();
}
}
因爲咱們重寫了Book類的toString方法,運行測試方法,控制檯輸出:ide
name:Think in Java; price:100
3.將Java對象轉爲Xml格式:工具
/* * Java對象轉xml */
@Test
public void testGenXml()
{
XmlMapper xmlMapper = new XmlMapper();
Book book = new Book("Think in Java",100);
try {
String xmlStr = xmlMapper.writeValueAsString(book);
System.out.println(xmlStr);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
運行測試方法,控制檯輸出:測試
<Book xmlns=""><name>Think in Java</name><price>100</price></Book>
4.將xml格式字符串轉爲Java對象:this
/* * xml轉Java對象 */
@Test
public void testGenObjByXml()
{
XmlMapper xmlMapper = new XmlMapper();
String xmlStr = "<Book><name>Think in Java</name><price>100</price></Book>";
try {
Book book = xmlMapper.readValue(xmlStr, Book.class);
System.out.println(book);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
輸出內容:
name:Think in Java; price:100
完整的測試用例代碼:
package com.csii.jackson.test;
import java.io.IOException;
import org.junit.Test;
import com.csii.jackson.object.Book;
import com.fasterxml.jackson.core.JsonEncoding;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
@SuppressWarnings("deprecation")
public class JsonTest {
private JsonGenerator jsonGen = null;
/* * Java對象轉 Json */
@Test
public void testGenJson()
{
ObjectMapper objMapper = new ObjectMapper();
Book book = new Book("Think in Java",100);
try {
jsonGen = objMapper.getJsonFactory().createJsonGenerator(System.out,JsonEncoding.UTF8);
jsonGen.writeObject(book);
} catch (IOException e) {
e.printStackTrace();
}
}
/* * Json轉Java對象 */
@Test
public void testGenObjByJson()
{
ObjectMapper objMapper = new ObjectMapper();
String json = "{\"name\":\"Think in Java\",\"price\":100}";
try {
Book book = objMapper.readValue(json, Book.class);
System.out.println(book);
} catch (IOException e) {
e.printStackTrace();
}
}
/* * Java對象轉xml */
@Test
public void testGenXml()
{
XmlMapper xmlMapper = new XmlMapper();
Book book = new Book("Think in Java",100);
try {
String xmlStr = xmlMapper.writeValueAsString(book);
System.out.println(xmlStr);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
/* * xml轉Java對象 */
@Test
public void testGenObjByXml()
{
XmlMapper xmlMapper = new XmlMapper();
String xmlStr = "<Book><name>Think in Java</name><price>100</price></Book>";
try {
Book book = xmlMapper.readValue(xmlStr, Book.class);
System.out.println(book);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}