1. 程式人生 > >json與bean的轉換

json與bean的轉換

Jackson可以輕鬆的將Java物件轉換成json物件和xml文件,同樣也可以將json、xml轉換成Java物件。

相比json-lib框架,Jackson所依賴的jar包較少,簡單易用並且效能也要相對高些。而且Jackson社群相對比較活躍,更新速度也比較快。

一、準備工作

1、 下載依賴庫jar包

然後在工程中匯入這個jar包即可開始工作

因為下面的程式是用junit測試用例執行的,所以還得新增junit的jar包。版本是junit-4.2.8

如果你需要轉換xml,那麼還需要stax2-api.jar

2、 測試類基本程式碼如下

package com.hoo.test;
import java.io.IOException;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.codehaus.jackson.JsonEncoding;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.node.JsonNodeFactory;
import org.codehaus.jackson.xml.XmlMapper;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.hoo.entity.AccountBean;
/**
 * <b>function:</b>Jackson 將java物件轉換成JSON字串,也可以將JSON字串轉換成java物件
 * jar-lib-version: jackson-all-1.6.2
 * jettison-1.0.1
 * @author hoojo
 * @createDate 2010-11-23 下午04:54:53
 * @file JacksonTest.java
 * @package com.hoo.test
 * @project Spring3
 * @blog http://blog.csdn.net/IBM_hoojo
 * @email [email protected]
 * @version 1.0
 */
@SuppressWarnings("unchecked")
public class JacksonTest {
    private JsonGenerator jsonGenerator = null;
    private ObjectMapper objectMapper = null;
    private AccountBean bean = null;
    @Before
    public void init() {
        bean = new AccountBean();
        bean.setAddress("china-Guangzhou");
        bean.setEmail("[email protected]");
        bean.setId(1);
        bean.setName("hoojo");
        objectMapper = new ObjectMapper();
        try {
            jsonGenerator = objectMapper.getJsonFactory().createJsonGenerator(System.out, JsonEncoding.UTF8);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    @After
    public void destory() {
        try {
            if (jsonGenerator != null) {
                jsonGenerator.flush();
            }
            if (!jsonGenerator.isClosed()) {
                jsonGenerator.close();
            }
            jsonGenerator = null;
            objectMapper = null;
            bean = null;
            System.gc();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3、 所需要的JavaEntity

package com.hoo.entity;
public class AccountBean {
    private int id;
    private String name;
    private String email;
    private String address;
    private Birthday birthday;
    //getter、setter
    @Override
    public String toString() {
        return this.name + "#" + this.id + "#" + this.address + "#" + this.birthday + "#" + this.email;
    }
}

Birthday

package com.hoo.entity;
public class Birthday {
    private String birthday;
    public Birthday(String birthday) {
        super();
        this.birthday = birthday;
    }
    //getter、setter
    public Birthday() {}
    @Override
    public String toString() {
        return this.birthday;
    }
}

二、Java物件轉換成JSON

1、 JavaBean(Entity/Model)轉換成JSON

/**
 * <b>function:</b>將java物件轉換成json字串
 * @author hoojo
 * @createDate 2010-11-23 下午06:01:10
 */
@Test
public void writeEntityJSON() {
    try {
        System.out.println("jsonGenerator");
        //writeObject可以轉換java物件,eg:JavaBean/Map/List/Array等
        jsonGenerator.writeObject(bean);    
        System.out.println();
        System.out.println("ObjectMapper");
        //writeValue具有和writeObject相同的功能
        objectMapper.writeValue(System.out, bean);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

執行後結果如下:

jsonGenerator
{"address":"china-Guangzhou","name":"hoojo","id":1,"birthday":null,"email":"[email protected]"}
ObjectMapper
{"address":"china-Guangzhou","name":"hoojo","id":1,"birthday":null,"email":"[email protected]"}

上面分別利用JsonGenerator的writeObject方法和ObjectMapper的writeValue方法完成對Java物件的轉換,二者傳遞的引數及構造的方式不同;JsonGenerator的建立依賴於ObjectMapper物件。也就是說如果你要使用JsonGenerator來轉換JSON,那麼你必須建立一個ObjectMapper。但是你用ObjectMapper來轉換JSON,則不需要JSONGenerator。

objectMapper的writeValue方法可以將一個Java物件轉換成JSON。這個方法的引數一,需要提供一個輸出流,轉換後可以通過這個流來輸出轉換後的內容。或是提供一個File,將轉換後的內容寫入到File中。當然,這個引數也可以接收一個JSONGenerator,然後通過JSONGenerator來輸出轉換後的資訊。第二個引數是將要被轉換的Java物件。如果用三個引數的方法,那麼是一個Config。這個config可以提供一些轉換時的規則,過指定的Java物件的某些屬性進行過濾或轉換等。

2、 將Map集合轉換成Json字串

/**
 * <b>function:</b>將map轉換成json字串
 * @author hoojo
 * @createDate 2010-11-23 下午06:05:26
 */
@Test
public void writeMapJSON() {
    try {
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("name", bean.getName());
        map.put("account", bean);
        bean = new AccountBean();
        bean.setAddress("china-Beijin");
        bean.setEmail("[email protected]");
        map.put("account2", bean);
        System.out.println("jsonGenerator");
        jsonGenerator.writeObject(map);
        System.out.println("");
        System.out.println("objectMapper");
        objectMapper.writeValue(System.out, map);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

轉換後結果如下:

jsonGenerator
{"account2":{"address":"china-Beijin","name":null,"id":0,"birthday":null,"email":"[email protected]"},"name":"hoojo",
"account":{"address":"china-Guangzhou","name":"hoojo","id":1,"birthday":null,"email":"[email protected]"}}
objectMapper
{"account2":{"address":"china-Beijin","name":null,"id":0,"birthday":null,"email":"[email protected]"},"name":"hoojo",
"account":{"address":"china-Guangzhou","name":"hoojo","id":1,"birthday":null,"email":"[email protected]"}}

3、 將List集合轉換成json

/**
 * <b>function:</b>將list集合轉換成json字串
 * @author hoojo
 * @createDate 2010-11-23 下午06:05:59
 */
@Test
public void writeListJSON() {
    try {
        List<AccountBean> list = new ArrayList<AccountBean>();
        list.add(bean);
        bean = new AccountBean();
            
           

相關推薦

jsonbean轉換

Jackson可以輕鬆的將Java物件轉換成json物件和xml文件,同樣也可以將json、xml轉換成Java物件。 相比json-lib框架,Jackson所依賴的jar包較少,簡單易用並且效能也要相對高些。而且Jackson社群相對比較活躍,更新速度也比較快。 一、準備工作 1、 下載依賴

json bean 之間的date轉換

擴充套件JsonValueProcessor介面獲得相應轉換的日期格式 import java.text.SimpleDateFormat;   import java.util.Date;     import net.sf.json.JsonConfig;   imp

JSONJavabean轉換的幾種形式

img 之一 keys open isp println 轉換成 hang zha JSON格式的數據傳遞是最常用的方法之一,以下列出了常用的幾種形態以及與Javabean之間的轉換:   String json1="{‘name‘:‘zhangsan‘,‘age‘

c++ jsonprotobuf 轉換

/* * data: 2018-04-14 * author: cc509a * email: * protocol buffer and json convert each other * support array ,enum */ #i

一些json物件轉換的工具集合類

package com.myhexin.ifs.utils; import org.codehaus.jackson.JsonFactory; import org.codehaus.jackson.JsonGenerationException; import org.codehaus.j

jsonbean,beanlist互轉

  /**      * json轉換成bean      *       */     public static <T> T jsonToBean(String jsonString, Class<T> beanCalss) throws Exc

Jsonbean互轉的例子

第一種: public class JsonToJavaBean { public static void main(String[] args) { String str="{\"student\

BeanUtils MapBean轉換

 不多說了,直接上程式碼,以下內容實現限制,javaBean必須在一個單獨的檔案中,並且Bean要為public的。【這裡需要依賴apache的commons-beanutils-1.7.0.jar】 轉換類: Java程式碼   import java.lang.reflect.Invoca

jsonjavabean轉換

String object = JSONObject.toJSONString(shoppingModelResultData);禁止json資料迴圈引用String object = JSONObject.toJSONString(shoppingModelResultData,SerializerFeat

JsonBean互轉,Timestamp型別的問題

Json與Java Bean互相轉換時,Bean中的Timestamp欄位是無法直接處理的,需要實現兩個轉換器。 DateJsonValueProcessor的作用是Bean轉換為Json時將Timepstamp轉換為指定的時間格式。 import java.text.D

JSON JAVA數據的相互轉換

sse map ini ngs 相互 pro lec ble throw import net.sf.json.JSONArray;import net.sf.json.JSONException;import net.sf.json.JSONObject;import

Android GIS開發系列-- 入門季(8) JsonGeometry的相互轉換

相互轉換 them 實用 興趣 parse 執行 pretty pre andro 在Android中json數據十分普遍,也很實用,在Arcgis中也同樣支持Json數據,Json與Geometry可以相互轉換,達到我們想要的數據。 一、Geometry轉換成Json數

js中js數組、對象json之間的轉換

clas 語法 方法 使用 blog ejs ava 部門 成了 ?數據在名稱/值對中?數據由逗號分隔?花括號保存對象?方括號保存數組 var jsonString = ‘{"bar":"property","baz":3}‘;//JSON字符串 var jsObject

【總結】使用Scala實現JsonCase Class相互轉換

json case classimport org.json4s.native.Serialization.{read, write} object Json2CaseClass extends App { implicit val formats = org.json4s.DefaultFormats

JsonList的相互轉換

from jsonarray fastjson exception 定義 又是 json info stock 生成二維碼的方法: 由於生成二維碼的參數類型是String,不能是list。如果將list的內容get出來拼成String生成二維碼。掃描二維碼後如何處理Stri

java常用工具類(一)—— Map Bean 之間的互相轉換

import net.bytebuddy.implementation.bytecode.Throw; import org.springframework.cglib.beans.BeanMap; import java.beans.PropertyDescriptor; import java.lang

python3 json 物件之間的相互轉換

原文地址:http://blog.csdn.net/leilba/article/details/50654256 真的很感謝 # -*- coding: UTF-8 -*- import json #自定義類 class MyClass:

JsonList之間的相互轉換

谷歌的Gson.jar: //list轉換為json Gson gson = new Gson(); List<Person> persons = new ArrayList<Person>(); String str = gson.toJson(persons)

java json字串物件轉換

下載引入包gson-2.0.jar 1.字元轉資料 final Map map = new HashMap();map.put("contents",    "[{\"Id\":\"111\",\"AcceptNum\":222,\"ArchiveNum\":

alibaba下的fast json字串String、陣列和list的相互轉換

/**  * 實體類轉json  * JSONObject j1 = (JSONObject)JSONObject.toJSON(man1);  * json轉實體類  * Man man3 = JSONObject.parseObject(j