高效解析json例子,Jackson框架
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;
/**
* function: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
/**
* function:將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字串
/**
* function:將map轉換成json字串
* @author hoojo
* @createDate 2010-11-23 下午06:05:26
*/
@Test
public void writeMapJSON() {
try {
Map map = new HashMap();
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":{相關推薦
高效解析json例子,Jackson框架
Jackson可以輕鬆的將Java物件轉換成json物件和xml文件,同樣也可以將json、xml轉換成Java物件。 相比json-lib框架,Jackson所依賴的jar包較少,簡單易用並且效能也要相對高些。而且Jackson社群相對比較活躍,更新速
jackson解析json字串,首字母大寫會自動轉為小寫
問題 樓主碰到的問題是,在實體類和表中定義的某個欄位為RMBPrice,首字母大寫,sql查詢出來的列名也是大寫的RMBPrice,但是使用jquery的datatables初始化列時,卻出錯。那一行的程式碼如下: {"name": "RMBPrice", "data": "RM
關於使用jackson.jar解析JSON時,大寫JSON key值發生報錯的問題
最近在專案中呼叫.NET的服務時,Jackson在解析返回的json字串時始終報錯,糾結很久之後才找到原因,原來是是由於json字串中的字母都是首字母大寫,導致jackson找不到相應的KEY。 解決方法有兩種: 直接將bean物件中的屬性改為public
mysql欄位用json格式,mybatis框架,傳前端格式轉意問題
a 前言 錯誤 解決 思考 前言 今天在實現點功能的時候,需要將mysql中的一個欄位型別設定為json,使用的框架是ssm,mybatis的逆向工程返回相應的欄位的型別是object,通過@responsebody註解傳
動態解析JSON字串,將資料存入資料庫
我在使用netty時候,由於不同裝置發出的JSON字串不一樣,我需要一個動態解析JSON字串方法去解決,我的思路是先將json字串通過gson這個類轉成map,由於在執行期間無法得知T的具體型別,對這個類的物件進行序列化和反序列化都不能正常進行。Gson通過藉助TypeTok
解析json陣列,取其中一部分組成新陣列物件
var dataArr = [{id:"1111",name:"aaa",age:"22"},{id:"2222",name:"bbb",age:"33"}]; var jsonTarget=[]; var ids = ""; //第一種方法 for (var i = 0;
安卓開發筆記(九)—— HttpURLConnection請求訪問Web服務,解析JSON資料,多執行緒,CardView佈局技術(bilibili的使用者視訊資訊獲取軟體)
中山大學資料科學與計算機學院本科生實驗報告 (2018年秋季學期) 一、實驗題目 WEB API 第十四周實驗目的 學會使用HttpURLConnection請求訪問Web服務 學習Android執行緒機制,學會執行緒更新UI 學會解析JSO
解析json串,並按照某個欄位排序
本文將為大家介紹json解析並按照某個欄位排序的方法。如果是漢字,轉化為漢語拼音後,按照字典順序排序。 原始json [{"proportionCost":0,"busiName":"aaav","userList":"李雷","allCost":53800,"liuCos
如何統一解析JSON資料,使用Gson結合泛型類靈活,讓您一勞永逸
作為一名android 客戶端開發人員,學會解決問題和總結問題的習慣是很重要的。。。那麼我們app介面資料返回通常是以下格式: {"code":"0000","data": {"code":"0002","resultData":null,"resultMsg":"使用者T
怎麼解析Json資料,然後把解析到的Json資料填充到佈局中?
一.首先把需要解析的Json資料如下所示: { "res_code": 0, "res_error": "", "res_body": { "Counts": 11596, "PageCount": 580,
Android 解析json物件,存放到List中
比如解析這段從伺服器端返回的json字串: [{"Money":3,"EtcOutTime":"2017-5-20 15:30:22","CarId":0,"EtcInTime":"2017-5-20
解析json字串,根據key得到對應的value的方法
最近公司的專案,寫了個傳入json字串和要獲取的key,返回相應value的方法。 public String jxJson(String mkey, String strJson) { String value = "";
fastjson生成和解析json資料,序列化和反序列化資料
publicstaticfinalObject parse(String text);//把JSON文字parse為JSONObject或者JSONArraypublicstaticfinalJSONObject parseObject(String text);// 把JSON文字parse成JSONObj
Gson解析Json時,欄位名一定要完全一樣,連空格都不能有
今日除錯的時候發現上報的資料明明有這一項,但是一直解析出來為NULL{"aaa ":101}public class AAA{ private Integer aaa;set方法get方法}Gson解析出來後一直是null。查了好久才發現了尾部的這個空格將json修改為
JSON解析類庫之Fastjson(1) --- Fastjson類庫學習, 生成與解析json資料,json字串與Java物件互轉
JSON解析類庫之Fastjson(1) --- Fastjson基礎知識、簡單JavaBean與複雜Bean物件與JSON互轉 -- Fastjson類庫學習, 生成與解析json資料,json
關於使用newtonsoft 解析json字串,即是將json字串轉換成json物件的寫法
首先將newtonsoft 引用到工程中,解析json字串有兩種格式,一種是單一的json字串,另一種是json字串資料格式 1,如果是單一的一條json字串,則採用如下方法: string jsonText = @"{""input"" : ""value"", ""
java解析json字串,多層解析
json泛型如下 { "code": 1, "message": "查詢成功", "data": [ { "type": 1, "question": "地層壓力與同井深的淡水靜液壓力之
stm32使用cjson檔案解析json檔案,分配記憶體宕機問題解決方案
使用乙太網從伺服器上拉取json字串,接收之後進行解析,但是cjson的包在使用malloc和free的時候經常出現問題,在研究stm32的記憶體分配問題之後,網上很多說是要自己寫記憶體管理,但是實際使用會產生很多問題,但是檢視手冊發現stm32F407本身已經有192kb的
解析json字串,並且獲取其中某個key的值
<span style="font-size:18px;">public static void main(String[] args) { String findStr = "hobby,listening,chinese";//查詢json字串中的某個k
Jackson 框架,輕易轉換JSON
Jackson可以輕鬆的將Java物件轉換成json物件和xml文件,同樣也可以將json、xml轉換成Java物件。 相比json-lib框架,Jackson所依賴的jar包較少,簡單易用並且效能也要相對高些。而且Jackson社群相對比較活躍,更新速度也