|
發表者 |
討論內容 |
冷日 (冷日) |
發表時間:2019/4/5 15:03 |
- Webmaster

- 註冊日: 2008/2/19
- 來自:
- 發表數: 15771
|
- [轉貼]Fastjson API 中文版
Fastjson API中文版由 路飛 創建, 最後一次修改 2016-12-11 Fastjson API中文版JSON這個類是fastjson API的入口,主要的功能都通過這個類提供。 序列化APIpackage com.alibaba.fastjson; public abstract class JSON { // 將Java對像序列化為JSON字符串,支持各種各種Java基本類型和JavaBean public static String toJSONString(Object object, SerializerFeature... features); // 將Java對像序列化為JSON字符串,返回JSON字符串的utf-8 bytes public static byte[] toJSONBytes(Object object, SerializerFeature... features); // 將Java對像序列化為JSON字符串,寫入到Writer中 public static void writeJSONString(Writer writer, Object object, SerializerFeature... features); // 將Java對像序列化為JSON字符串,按UTF-8編碼寫入到OutputStream中 public static final int writeJSONString(OutputStream os, // Object object, // SerializerFeature... features); } JSON字符串反序列化APIpackage com.alibaba.fastjson; public abstract class JSON { // 將JSON字符串反序列化為JavaBean public static <T> T parseObject(String jsonStr, Class<T> clazz, Feature... features); // 將JSON字符串反序列化為JavaBean public static <T> T parseObject(byte[] jsonBytes, // UTF-8格式的JSON字符串 Class<T> clazz, Feature... features); // 將JSON字符串反序列化為泛型類型的JavaBean public static <T> T parseObject(String text, TypeReference<T> type, Feature... features); // 將JSON字符串反序列為JSONObject public static JSONObject parseObject(String text); } Demo parse Treeimport com.alibaba.fastjson.*; JSONObject jsonObj = JSON.parseObject(jsonStr); parse POJOimport com.alibaba.fastjson.JSON; Model model = JSON.parseObject(jsonStr, Model.class); parse POJO Genericimport com.alibaba.fastjson.JSON; Type type = new TypeReference<List<Model>>() {}.getType(); List<Model> list = JSON.parseObject(jsonStr, type); convert POJO to json stringimport com.alibaba.fastjson.JSON; Model model = ...; String jsonStr = JSON.toJSONString(model); convert POJO to json bytesimport com.alibaba.fastjson.JSON; Model model = ...; byte[] jsonBytes = JSON.toJSONBytes(model); write POJO as json string to OutputStreamimport com.alibaba.fastjson.JSON; Model model = ...; OutputStream os; JSON.writeJSONString(os, model); write POJO as json string to Writerimport com.alibaba.fastjson.JSON; Model model = ...; Writer writer = ...; JSON.writeJSONString(writer, model); 原文出處:Fastjson API中文版_w3cschool
|
|
冷日 (冷日) |
發表時間:2019/4/5 15:10 |
- Webmaster

- 註冊日: 2008/2/19
- 來自:
- 發表數: 15771
|
- [轉貼]fastJson API
fastJson APIFastJSON是一個很好的java開源json工具類庫,相比其他同類的json類庫,它的速度的確是fast,最快!但是文檔做得不好,在應用前不得不親測一些功能。 實際上其他的json處理工具都和它差不多,api也有幾分相似。
一、JSON規範 JSON是一個標準規範,用於數據交互,規範的中文文檔如下: 參看規範,來對比JSON類庫處理結果。 二、fastjson的一些簡要說明 1、瞭解fastjson Fastjson介紹 2、主要的使用入口 Fastjson API入口類是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON類上的靜態方法直接完成。 public static finalObject parse(String text); // 把JSON文本parse為JSONObject或者JSONArray public static finalJSONObject parseObject(String text); // 把JSON文本parse成JSONObject public static final<T> T parseObject(String text, Class<T> clazz); // 把JSON文本parse為JavaBean public static finalJSONArray parseArray(String text); // 把JSON文本parse成JSONArray public static final<T> List<T> parseArray(String text, Class<T> clazz); //把JSON文本parse成JavaBean集合 public static final String toJSONString(Object object); // 將JavaBean序列化為JSON文本 public static finalString toJSONString(Object object, booleanprettyFormat); // 將JavaBean序列化為帶格式的JSON文本 public static finalObject toJSON(Object javaObject); 將JavaBean轉換為JSONObject或者JSONArray。 3、有關類庫的一些說明 SerializeWriter:相當於StringBuffer JSONArray:相當於List<Object> JSONObject:相當於Map<String, Object> JSON反序列化沒有真正數組,本質類型都是List<Object> 原文出處:fastJson API - 灯塔的CSDN博客 - CSDN博客
|
|
|
冷日 (冷日) |
發表時間:2019/4/5 15:16 |
- Webmaster

- 註冊日: 2008/2/19
- 來自:
- 發表數: 15771
|
- [轉貼]FastJson 的使用
簡介Fastjson是一個Java語言編寫的高性能功能完善的JSON庫。 高性能fastjson採用獨創的算法,將parse的速度提升到極致,超過所有json庫,包括曾經號稱最快的jackson。並且還超越了google的二進制協議protocol buf。 支持標準 功能強大 - 支持各種JDK類型。包括基本類型、JavaBean、Collection、Map、Enum、泛型等。
- 支持循環引用
無依賴 支持範圍廣 - 支持JDK 5、JDK 6、Android、阿里雲手機等環境。
開源 測試充分 - fastjson有超過1500個testcase,每次構建都會跑一遍,豐富的測試場景保證了功能穩定。
獲得fastjson 下載 http://code.alibabatech.com/mvn/releases/com/alibaba/fastjson/ maven如果你使用了Maven,maven repository配置如下: <repository> <id>opensesame</id> <name>Alibaba OpenSource Repsoitory</name> <url>http: //code.alibabatech.com/mvn/releases/</url> <snapshots> <enabled> false </enabled> </snapshots> </repository> |
pom.xml文件中加入依賴依賴: <dependency> <groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId> <version> 1.1 . 14 </version> </dependency> |
序列化一個JSON庫涉及的最基本功能就是序列化和反序列化。Fastjson支持java bean的直接序列化。你可以使用com.alibaba.fastjson.JSON這個類進行序列化和反序列化。 基本序列化序列化就是把JavaBean對像轉化成JSON格式的文本。 Object o = ...; String text = JSON.toJSONString(o); |
在這個例子中,調用JSON.toJSONString方法,把對像o轉化為JSON格式的文本。 使用單引號標準的JSON是使用雙引號的,javascript支持使用單引號格式的json文本,fastjson也支持這個特性,打開SerializerFeature.UseSingleQuotes這個特性就可以了了,例如: Object o = ...; String text = JSON.toJSONString(o, SerializerFeature.UseSingleQuotes); |
fastjson序列化時可以選擇的SerializerFeature有十幾個,你可以按照自己的需要去選擇使用。 日期格式化fastjson直接支持日期類型數據的格式化,包括java.util.Date、java.sql.Date、java.sql.Timestamp、java.sql.Time。 缺省情況下,fastjson將Date類型序列化為long,這個使得序列化和反序列化的過程不會導致時區問題。如: 例如: long millis = 1324138987429L; Date date = new Date(millis);
System.out.println(JSON.toJSONString(date)); |
輸出的結果是 fastjson還提供了基於格式化輸出的SerializerFeature,例如: JSON.toJSONString(date, SerializerFeature.WriteDateUseDateFormat); |
輸出的結果為: 你可以指定輸出日期的格式,比如修改為輸出毫秒: JSON.toJSONStringWithDateFormat(date, ); |
輸出的結果為: 使用WriteClassName特性fastjson支持序列化時寫入類型信息,從而使得反序列化時不至於類型信息丟失。例如: Color color = Color.RED; String text = JSON.toJSONString(color, SerializerFeature.WriteClassName); System.out.println(text); |
輸出結果: { : , : 255 , : 0 , : 0 , : 255 } |
由於序列化帶了類型信息,使得反序列化時能夠自動進行類型識別,例如: String text = ...;
Color color = (Color) JSON.parse(text); |
瀏覽器和設備兼容fastjson缺省的序列化內容,是對序列化結果緊湊做了優化配置,使得序列化之後長度更小,但是這種優化配置是對一些瀏覽器和設備不兼容的。比如說在iphone上兼容emoji(繪文字)。 JSON.toJSONString(o, SerializerFeature.BrowserCompatible); |
循環引用很多場景中,我們需要序列化的對象中存在循環引用,在許多的json庫中,這會導致stackoverflow。在功能強大的fastjson中,你不需要擔心這個問題。例如:
A a = new A();
B b = new B(a); a.setB(b); String text = JSON.toJSONString(a);
A a1 = JSON.parseObject(text, A. class ); Assert.assertTrue(a1 == a1.getB().getA()); |
引用 描述 | 上一級 | | 當前對象,也就是自引用 | | 根對像 | | 基於路徑的引用,相當於 root.getChildren().get(0) |
public class User {
@JSONField (name= )
public int getId() { ... } } User user = ...; JSON.toJSONString(user);
|
從json-lib中升級如果你已經使用了json-lib,並且痛恨他蝸牛般的速度和囉嗦的API,建議你升級為fastjson,fastjson可以完全兼容json-lib的序列化格式。 import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.serializer.JSONLibDataFormatSerializer; import com.alibaba.fastjson.serializer.JSONSerializerMap; import
com.alibaba.fastjson.serializer.SerializerFeature;
private static final SerializeConfig config; static { config = new SerializeConfig(); config.put(java.util.Date. class , new JSONLibDataFormatSerializer()); // 使用和json-lib兼容的日期輸出格式 config.put(java.sql.Date. class , new JSONLibDataFormatSerializer()); // 使用和json-lib兼容的日期輸出格式 }
private static final SerializerFeature[] features = { SerializerFeature.WriteMapNullValue, // 輸出空置字段 SerializerFeature.WriteNullListAsEmpty, // list字段如果為null,輸出為[],而不是null SerializerFeature.WriteNullNumberAsZero, // 數值字段如果為null,輸出為0,而不是null SerializerFeature.WriteNullBooleanAsFalse, // Boolean字段如果為null,輸出為false,而不是null SerializerFeature.WriteNullStringAsEmpty
};
// 序列化為和JSON-LIB兼容的字符串 public static String toCompatibleJSONString(Object object) { return JSON.toJSONString(object, config, features); } |
通過上面代碼中的toCompatibleJSONString方法,你就可以實現完全兼容json-lib了。 反序列化反序列化就是把JSON格式的文本轉化為Java Bean對象。 指定Class信息反序列化 String text = ...;
Color color = JSON.parseObject(text, Color. class ); |
類型集合的反序列化這個接口類似於parseObject String text = ...; // [{ ... }, { ... }] List<User> users = JSON.parseArray(text, User. class );
|
泛型的反序列化如果你需要返回一個帶泛型的對象,例如List<User>、Map<String, User>,你可以使用TypeReference來傳入類型信息。 String text = ...;
Map<String, User> userMap = JSON.parseObject(text, new TypeReference<Map<String, User>>() {}); |
組合類型集合的反序列化比如在網絡協議中,經常會存在這樣的組合: [{ /*header*/}, {/*body*/ }] |
fastjson對這種結構的反序列化有專門支持。 String text = ...; // [{/* header */}, {/* body */}] Type[] types = new Type[] {Header. class , Body. class }; List<Object> list = JSON.parseArray(text, types); Header header = (Header) list.get( 0 ); Body body = (Body) list.get( 1 ); |
如果你的JavaBean沒有缺省構造函數,可以使用@JSONCreator來指定構造函數 public static class Entity { private final int id; private final String name; @JSONCreator public Entity( @JSONField (name = ) int id, @JSONField (name = ) String name){ this .id = id; this .name = name; } public int getId() { return id; } public String getName() { return name; } } |
把JSON文本反序列化為一個原型接口 public static interface Bean { int getId(); void setId( int value); String getName(); void setName(String value); } String text = ; Bean bean = JSON.parseObject(text, Bean. class ); // 按接口調用 Assert.assertEquals( 123 , bean.getId()); Assert.assertEquals( , bean.getName()); bean.setId( 234 ); Assert.assertEquals( 234 , bean.getId());
出自:
|
原文出處: Json解析教程(四.FastJson 的使用) - - ITeye博客
|
|
冷日 (冷日) |
發表時間:2019/4/5 15:20 |
- Webmaster

- 註冊日: 2008/2/19
- 來自:
- 發表數: 15771
|
- [轉貼]fastJson 在 java 後台轉換 json 格式數據探究
fastJson在java後台轉換json格式數據探究(一) 2012年12月28日 13:44:46 長安散人 閱讀數:63213 什麼事 JSON? JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。 易於人閱讀和編寫。同時也易於機器解析和生成。 它基於 JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999 的一個子集。 JSON 採用完全獨立於語言的文本格式,但是也使用了類似於 C 語言家族的習慣(包括 C, C++, C#, Java, JavaScript, Perl, Python 等)。 這些特性使 JSON 成為理想的數據交換語言。 現在我們就來研究一下 fastJson 。 Fastjson是國內著名的電子商務互聯網公司阿里巴巴內部開發的用於 java 後台處理 json 格式數據的一個工具包,包括 「 序列化 」 和 「 反序列化 」 兩部分,它具備如下特徵: 1 ) .速度最快,測試表明, fastjson 具有極快的性能,超越任其他的 java json parser 。包括自稱最快的 jackson 。 2 ) .功能強大,完全支持 java bean 、集合、 Map 、日期、 Enum ,支持范型,支持自省。 3 ) .無依賴,能夠直接運行在 Java SE 5.0 以上版本 4 ) .支持 Android 。 5 ) .開源 (Apache 2.0) 這是 fastJson 的網址: http://code.alibabatech.com/wiki/display/FastJSON/Overview 其中包含了 json 數據處理的教程, jar 下載地址, example 樣例等。
下面給出fastJson處理json數據格式的代碼樣例: package fastJson.test; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.serializer.SerializerFeature; public class FastJsonTest { /** * 序列化 */ public void toJsonString() { User user = new User("testFastJson001", "maks", 105); String text = JSON.toJSONString(user); System.out.println("toJsonString()方法:text=" + text); // 輸出結果:text={"age":105,"id":"testFastJson001","name":"maks"} } /** * 反序列化為json對像 */ public void parseJsonObject() { String text = "{\"age\":105,\"id\":\"testFastJson001\",\"name\":\"maks\"}"; JSONObject json = JSON.parseObject(text); System.out.println("parseJsonObject()方法:json==" + json); // 輸出結果:json=={"age":105,"id":"testFastJson001","name":"maks"} } /** * 反序列化為javaBean對像 */ public void parseBeanObject() { String text = "{\"age\":105,\"id\":\"testFastJson001\",\"name\":\"maks\"}"; User user = (User) JSON.parseObject(text, User.class); System.out.println("parseBeanObject()方法:user==" + user.getId() + "," + user.getName() + "," + user.getAge()); // 輸出結果:user==testFastJson001,maks,105 } /** * 將javaBean轉化為json對像 */ public void bean2Json() { User user = new User("testFastJson001", "maks", 105); JSONObject jsonObj = (JSONObject) JSON.toJSON(user); System.out.println("bean2Json()方法:jsonObj==" + jsonObj); // 輸出結果:jsonObj=={"age":105,"id":"testFastJson001","name":"maks"} } /** * 全序列化 直接把java bean序列化為json文本之後,能夠按照原來的類型反序列化回來。支持全序列化,需要打開SerializerFeature.WriteClassName特性 */ public void parseJSONAndBeanEachother() { User user = new User("testFastJson001", "maks", 105); SerializerFeature[] featureArr = { SerializerFeature.WriteClassName }; String text = JSON.toJSONString(user, featureArr); System.out.println("parseJSONAndBeanEachother()方法:text==" + text); // 輸出結果:text=={"@type":"fastJson.test.User","age":105,"id":"testFastJson001","name":"maks"} User userObj = (User) JSON.parse(text); System.out.println("parseJSONAndBeanEachother()方法:userObj==" + userObj.getId() + "," + userObj.getName() + "," + userObj.getAge()); // 輸出結果:userObj==testFastJson001,maks,105 } public static void main(String[] args) { FastJsonTest test = new FastJsonTest(); // 序列化 test.toJsonString(); // 反序列化為json對像 test.parseJsonObject(); // 反序列化為javaBean對像 test.parseBeanObject(); // 將javaBean轉化為json對像 test.bean2Json(); // 全序列化 test.parseJSONAndBeanEachother(); } }
控制台輸出結果: parseJsonObject()方法:json=={"age":105,"id":"testFastJson001","name":"maks"} parseBeanObject()方法:user==testFastJson001,maks,105 bean2Json()方法:jsonObj=={"age":105,"id":"testFastJson001","name":"maks"} parseJSONAndBeanEachother()方法:text=={"@type":"fastJson.test.User","age":105,"id":"testFastJson001","name":"maks"} parseJSONAndBeanEachother()方法:userObj==testFastJson001,maks,105
附:javaBean類User.java package fastJson.test; import java.io.Serializable; public class User implements Serializable { private static final long serialVersionUID = 1L; private String id; private String name; private int age; public User() { super(); } public User(String id, String name, int age) { super(); this.id = id; this.name = name; this.age = age; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
原文出處:fastJson在java后台转换json格式数据探究(一) - hu_shengyang的专栏 - CSDN博客
|
|
冷日 (冷日) |
發表時間:2019/4/5 15:23 |
- Webmaster

- 註冊日: 2008/2/19
- 來自:
- 發表數: 15771
|
- [轉貼]阿里巴巴的 fastjson 使用示例
Java編程:阿里巴巴的fastjson使用示例在pom.xml文件中添加dependency,如下: dependency> groupId> artifactId> version> dependency> User類: class User { private String name; private Integer age; private String sex; toString(){ this.sex; } getName() { return name; } setName(String name) { this.name = name; } getAge() { return age; } setAge(Integer age) { this.age = age; } getSex() { return sex; } setSex(String sex) { this.sex = sex; } } 使用示例: main(String[] args) { User user = new User(); user.setName(); user.setAge(20); user.setSex(); String str = ; /** 將JSON字符串轉換為JSON對像 **/ JSONObject json = JSONObject.parseObject(str); System.out.println(json.get()); /** 將JSON字符串轉換為JavaBean對像 **/ user = JSONObject.parseObject(str, User.class); System.out.println(user); /** 將JavaBean對像轉換為JSON字符串 **/ String content = JSONObject.toJSONString(user); System.out.println(content); /** 將JavaBean對像轉換為JSONObject **/ json = (JSONObject)JSONObject.toJSON(user); System.out.println(json.get()); } 原文出處: Java编程:阿里巴巴的fastjson使用示例 - 天将降大任于是人 - CSDN博客
|
|
冷日 (冷日) |
發表時間:2019/4/5 15:25 |
- Webmaster

- 註冊日: 2008/2/19
- 來自:
- 發表數: 15771
|
- [轉貼]JAVA 中使用 alibaba fastjson 實現 JSONObject、Object、Json 字串的轉換
JAVA中使用alibaba fastjson實現JSONObject、Object、Json字串的轉換Object轉JSON字串: String jsonStr = JSONObject.toJSONString(object);
JSON字串轉JSONObject: JSONObject jsonObject = JSONObjcet.parseObject(jsonStr);
JSON字串轉Object物件 T t = JSON.parseObject(jsonStr,T.class);
原文出處:JAVA中使用alibaba fastjson實現JSONObject、Object、Json字串的轉換 - IT閱讀
|
|
|
冷日 (冷日) |
發表時間:2019/6/27 17:14 |
- Webmaster

- 註冊日: 2008/2/19
- 來自:
- 發表數: 15771
|
- [轉貼]FastJson 中 JSONObject 用法及常用方法總結
本文為博主原創,未經允許不得轉載: 最近一直有用到解析各種數據,主要是用FastJson進行數據解析,其中一個重要的類為JSONObject,今天有時間,所以進行總結一下: JSONobject是FastJson提供的對象,在api中是用一個私有的常量map進行封裝的,實際就是一個map,只不過FastJson對其進行了封裝, 添加了很多方便快捷的屬性方法。 final Map<String, Object> map; 在項目中添加maven依賴 <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.48</version> </dependency> 先來看下它有哪些常用方法,以及有什麼作用: 1.put(String key, Object value)方法,在JSONObject對像中設置鍵值對在,在進行設值得時候,key是唯一的,如果用相同的key不斷設值得時候,保留後面的值。 2.Object get(String key) :根據key值獲取JSONObject對像中對應的value值,獲取到的值是Object類型,需要手動轉化為需要的數據類型 3.int size():獲取JSONObject對像中鍵值對的數量 4.boolean isEmpty():判斷該JSONObject對象是否為空 5.containsKey(Object key):判斷是否有需要的key值 6.boolean containsValue(Object value):判斷是否有需要的value值 7.JSONObject getJSONObject(String key):如果JSONObjct對像中的value是一個JSONObject對象,即根據key獲取對應的JSONObject對像; 8.JSONArray getJSONArray(String key) :如果JSONObject對像中的value是一個JSONObject數組,既根據key獲取對應的JSONObject數組; 9.Object remove(Object key):根據key清除某一個鍵值對。 由於JSONObject是一個map,它還具有map特有的兩個方法: 10.Set<String> keySet() :獲取JSONObject中的key,並將其放入Set集合中 11.Set<Map.Entry<String, Object>> entrySet():在循環遍歷時使用,取得是鍵和值的映射關係,Entry就是Map接口中的內部接口 與String字符串轉換: 12.toJSONString() /toString():將JSONObject對像轉換為json的字符串 常用的方法主要為以上這些,下面列出使用這些方法的example: main(String[] args) { 新建JSONObject對像 JSONObject object1 = JSONObject(); 1.在JSONObject對像中放入鍵值對 object1.put("name", "張三"); object1.put("name1", "張三1"); object1.put("name2", "張三2"); 2.根據key獲取value String name = (String) object1.get("name"); System.out.println(name); 3.獲取JSONObject中的鍵值對個數 object1.size(); System.out.println(size); 4.判斷是否為空 object1.isEmpty(); System.out.println(result); 5.是否包含對應的key值,包含返回true,不包含返回false ); System.out.println(isContainsKeyResult); 6.是否包含對應的value值,包含返回true,不包含返回false ); System.out.println(isContainsValueResult); 7.JSONObjct對像中的value是一個JSONObject對象,即根據key獲取對應的JSONObject對像; JSONObject object2 = JSONObject(); 將jsonobject對像作為value進行設置 object2.put("student1", object1); JSONObject student =object2.getJSONObject("student1"); System.out.println(student); 8.如果JSONObject對像中的value是一個JSONObject數組,既根據key獲取對應的JSONObject數組; JSONObject objectArray = JSONObject(); 創建JSONArray數組 JSONArray jsonArray = JSONArray(); 在JSONArray數組設值:jsonArray.add(int index, Object value); jsonArray.add(0, "this is a jsonArray value"); jsonArray.add(1, "another jsonArray value"); objectArray.put("testArray", jsonArray); 獲取JSONObject對像中的JSONArray數組 JSONArray jsonArray2 = objectArray.getJSONArray("testArray"); System.out.println(jsonArray2); 9.remove.根據key移除JSONObject對像中的某個鍵值對 object1.remove("name"); System.out.println(object1); 10.取得JSONObject對像中key的集合 Set<String> keySet= object1.keySet(); (String key : keySet) { System.out.print(" "+key); } System.out.println(); 11.取得JSONObject對像中的鍵和值的映射關係 Set<Map.Entry<String, Object>> entrySet = object1.entrySet(); entry : entrySet) { System.out.println(entry); } 12.轉換為json字符串 String str1 = object1.toJSONString(); System.out.println(str1); String str2 =object1.toString(); System.out.println(str2); } 運行以上程序的結果為:  原文出處:FastJson中JSONObject用法及常用方法总结 - 香吧香 - 博客园
|
|
|