1. 程式人生 > >json處理三部曲之第二曲:利用Jackson處理json

json處理三部曲之第二曲:利用Jackson處理json

利用Jackson處理json需要匯入的jar包(2以上版本的):

<dependency>
     <groupId>com.fasterxml.jackson.core</groupId>
     <artifactId>jackson-core</artifactId>
     <version>2.3.3</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.3.3</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>2.3.3</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-smile</artifactId>
    <version>2.3.3</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.jaxrs</groupId>
    <artifactId>jackson-jaxrs-json-provider</artifactId>
    <version>2.3.3</version>
</dependency>
<!-- Support for JAX-B annotations as additional configuration -->
<dependency>
    <groupId>com.fasterxml.jackson.module</groupId>
    <artifactId>jackson-module-jaxb-annotations</artifactId>
    <version>2.3.3</version>
</dependency>
測試程式碼:
@Test
	public void writeEntity2JSON() throws JsonProcessingException, IOException {
		ObjectMapper objectMapper = new ObjectMapper();
		Person person = new Person();
		person.setId(1);
		person.setName("zhangsan");
		person.setEmail("[email protected]");
	       /**
          * ObjectMapper是JSON操作的核心,Jackson的所有JSON操作都是在ObjectMapper中實現。
          * ObjectMapper有多個JSON序列化的方法,可以把JSON字串儲存File、OutputStream等不同的介質中。
          * writeValue(File file, Object arg1)把arg1轉成json序列,並儲存到file檔案中。
          * writeValue(OutputStream out, Object arg1)把arg1轉成json序列,並儲存到out輸出流中。
          * writeValueAsBytes(Object arg0)把arg0轉成json序列,並把結果輸出成位元組陣列。
          * writeValueAsString(Object arg0)把arg0轉成json序列,並把結果輸出成字串。
          */
		String jsonStr=objectMapper.writeValueAsString(person);
                System.out.println(jsonStr);
 }

	@Test
	public void readJson2Entity() throws JsonParseException, JsonMappingException, IOException {
		ObjectMapper objectMapper = new ObjectMapper();
		String json = "{\"id\":1,\"name\":\"haha\",\"email\":\"email\"}";
		Person acc = objectMapper.readValue(json, Person.class);
		System.out.println(acc);
	}

	@Test
	public void readJson2Map() throws JsonParseException, JsonMappingException, IOException {
		ObjectMapper objectMapper = new ObjectMapper();
		String json = "{\"A\":{\"id\":1,\"name\":\"zhangsan\",\"email\":\"
[email protected]
\"},\"B\":{\"id\":2,\"name\":\"lisi\",\"email\":\"[email protected]\"},\"success\":true}"; @SuppressWarnings("unchecked") Map<String, Map<String, Object>> maps = objectMapper.readValue(json, Map.class); System.out.println(maps); } @Test public void readJson2List() throws IOException { ObjectMapper objectMapper = new ObjectMapper(); String json = "[{\"id\":1,\"name\":\"zhangsan\",\"email\":\"
[email protected]
\"},{\"id\":2,\"name\":\"lisi\",\"email\":\"[email protected]\"}]"; @SuppressWarnings("unchecked") List<LinkedHashMap<String, Object>> list = objectMapper.readValue(json, List.class); System.out.println(list); } @Test public void readJson2Array() throws JsonParseException, JsonMappingException, IOException { ObjectMapper objectMapper = new ObjectMapper(); String json = "[{\"id\":1,\"name\":\"zhangsan\",\"email\":\"[email protected]\"},{\"id\":2,\"name\":\"lisi\",\"email\":\"[email protected]\"}]"; Person[] arr = objectMapper.readValue(json, Person[].class); System.out.println(arr.length); }
其實主要用到了兩個方法:

轉換成json物件或者說json字串時,用objectMapper的writeValueAsString()方法或是writeValue()過載方法(objectMapper只需通過無參構造器new出來)

轉換json字串時用objectMapperd的readValue(String content, Class<T> valueType),直接得到JavaBean物件,中間並沒有轉換成Json物件環節。

一個writeValueAsString(),一個是readValue(),對應的,很好記。

相關推薦

json處理三部曲第二利用Jackson處理json

利用Jackson處理json需要匯入的jar包(2以上版本的): <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId&

Linux賬號管理第二對用戶組進行管理

mov 切換 屬於 tom blog 用戶組 第二篇 roo clas 1、查看用戶的有效組群     groups 用戶名 註意:查看出來的結果可能有多個;第一個為主組群,後面的都是副組群    2、添加和刪除組群     添加一個組:groupadd 組

(轉)Django學習 第二Django快速上手

nbsp ida IT 介紹 你在 django edi nal python代碼 安裝Python 安裝Django非常容易。因為Django可以運行在任何可以運行Python的環境中,所以可以以多種方式進行配置。 在本章我們將嘗試覆蓋幾種常見的Django安裝場景。

Introduction to 3D Game Programming with DirectX 12 學習筆記 --- 第二矩陣代數

學習目標: 理解矩陣和與它相關的運算; 理解矩陣的乘法如何被看成是線性組合; 理解單位矩陣、轉置矩陣、矩陣的行列式和逆矩陣; 熟悉DirectX Math庫中矩陣相關的類和函式; 1 矩陣的定義 一個m x n的矩陣M是一個有實陣列成的

24小時學通Qt第二學時面向物件程式設計

一、問題與答案: 1、問:我的編譯器不能編譯OOP程式碼,它顯示缺少.h檔案,為什麼?       答:需要OOP編譯器,如egcs,來編譯OOP程式,還需要安裝C++庫和標頭檔案,有的編譯器或者分發程式帶有這些檔案。 2、問:當編譯一個面向物件的程式時,為

數字影象處理筆記(一)利用OpenCV的Cameo框架搭建實驗環境

1 - 引言 Python的應用程式可以通過面向物件的方法來實現,OpenCV提供了一個Cameo框架可以捕捉電腦的攝像頭。我們可以通過編寫新增框架裡的類和方法來對攝像頭捕捉到的畫面進行影象處理和實驗,是一個很好的學習方法,下面讓我們來搭建一下這個Cameo框架 2 - 使用mana

《Kotlin實戰》學習筆記第二Kotlin基礎

一、基本要素:函式和變數 1、Hello,world fun main(args: Array<Stirng>) { println("Hello, world!") } 關鍵字

Unity第二10-19

10、繼續學習啊,介紹Game View,在Game View中,當玩家正在玩我們的遊戲時,他們所看到的畫面,我們可以在Game View中測試我們的遊戲   11、進入遊戲模式,點選中間那個Play按鈕即可   12、在遊戲模式中,真的可以玩遊戲

Spark入門三部曲第二步Spark開發環境搭建

使用Scala+IntelliJ IDEA+Sbt搭建開發環境 提示 搭建開發環境常遇到的問題: 1.網路問題,導致sbt外掛下載失敗,解決方法,找到一個好的網路環境, 將下載的.ivy2壓縮檔案,解壓後,放到你的使用者目錄下。 2.版本匹配問題,

Java Web 學習筆記十二JBoss RestEasy處理跨域OPTIONS請求方式

跨域請求問題 前提 前後端分離的B/S架構系統 前後端獨立開發,後端採用JBoss restEasy 框架搭建restful服務 後端程式碼開發完成並且部署在某一臺測試機上 前端開發過程中,需

Java Web 學習筆記十一RestEasy統一處理異常

JBoss RestEasy框架配置異常統一處理 前提 利用JBoss restEasy框架搭建的restful java web後臺應用 希望通過統一的方式對restful介面丟擲的異常進行

《11招玩轉網路安全》第二漏洞掃描

1、Nexpose預設的埠是3780,所以用瀏覽器開啟https://localhost:3780開啟Nexpose的客戶端,單擊左上角的主頁按鈕,開啟Nexpose客戶端的主頁。單擊左下角的“建立站點”按鈕,開始建立掃描任務,如圖2-30所示。圖2-30  Nexpose客

Tensorflow深度學習十二基礎影象處理

首先放出原始影象: 1、影象的翻轉 import tensorflow as tf import cv2 # 這裡定義一個tensorflow讀取的圖片格式轉換為opencv讀取的圖片格式的函式 # 請注意: # 在tensorflow中,一個畫素

《TI C2000入門培訓》 第二C28x架構概述[下載]

【課程簡介】C2000被廣泛用於數字電機驅動、數字電源控制、新能源、等工業、家電、汽車方面的應用。C2000 Launchpad開發板是德州儀器公司2012年推出的一款非常超值的針對TMS320F2802x0系列MCU的開發板。本課程由TI資深專家羅焰明主講,並有豐富的針對

數字影象處理成長路4 C語言與離散傅立葉變換(DFT)

這幾天一直學習傅立葉變換,看了很多國內外資料,網上講原理的很多,到了程式實現這塊大多是Matlab,opencv等,這些軟體的api對於我們理解DFT在計算機中的實現並沒有多大幫助。於是想用C/C++實現DFT,經過不斷的閱讀與程式設計實驗,最終程式有了還算滿意

ELBagging(DTR)利用Bagging對迴歸問題(實數值評分預測)建模(調2參)

EL之Bagging(DTR):利用Bagging對迴歸問題(實數值評分預測)建模(調2參) 輸出結果   設計思路   核心程式碼 bagFract = 1.0 #----------------------☆☆☆☆☆

ELGB(GBR)利用GBR對迴歸問題(實數值評分預測)建模

EL之GB(GBR):利用GBR對迴歸問題(實數值評分預測)建模 輸出結果   設計思路   核心程式碼 wineGBMModel = ensemble.GradientBoostingRegressor(n_estimators=nEst

ELGB(GBM)利用GB對(鮑魚物理指標)迴歸(性別屬性編碼)問題(整數值年齡預測)建模

EL之GB(GBM):利用GB對(鮑魚物理指標)迴歸(性別屬性編碼)問題(整數值年齡預測)建模 輸出結果 設計思路   核心程式碼 #T1 nEst = 2000 depth = 5 learnRate = 0.003 maxFeatures

ELRF(RFC)利用RF對二分類問題進行建模並評估

EL之RF(RFC):利用RF對二分類問題進行建模並評估 輸出結果   設計思路   核心程式碼 auc = [] nTreeList = range(50, 2000, 50) for iTrees in nTreeList:

ELRF(RFC)利用RF對多分類問題進行建模並評估(六分類+分層抽樣)

EL之RF(RFC):利用RF對多分類問題進行建模並評估(六分類+分層抽樣) 輸出結果 設計思路   核心程式碼 missCLassError = [] nTreeList = range(50, 2000, 50) for iTrees in n