Atitit.atijson 類庫的新特性設計與實現 v3 q31

来源:http://www.cnblogs.com/attilax/archive/2016/03/08/5254541.html
-Advertisement-
Play Games

Atitit.atijson 類庫的新特性設計與實現 v3 q31 1. V1版本---集成了多引擎1 2. V2版本新特性 --bsh腳本化2 3. V3版本新特性---迴圈引用解決使用fastjson2 4. prob目前jsonlib庫的存在的問題,2 4.1. 可能版本衝突,拋出ex2 4.


Atitit.atijson 類庫的新特性設計與實現 v3 q31

 

 

 

1V1版本---集成了多引擎1

2V2版本新特性 --bsh腳本化2

3V3版本新特性---迴圈引用解決使用fastjson2

4prob目前jsonlib庫的存在的問題,2

4.1. 可能版本衝突,拋出ex2

4.2. 多個json類庫編譯需求jar ,需要同時具備多個json jar類庫才可編譯成功。。麻煩2

4.3. 迴圈引用的解決2

5solu解決之道:2

5.1. 自定義json解析庫,使用多個複合的json 解析複合的引擎2

5.2. 迴圈引用暫時使用fastjson解決,最終要限制level解決2

5.3. 腳本化,防止編譯問題的 出現3

6幾個要點3

6.1. 複合結構的轉換3

6.2. 沒有get set方法的屬性自動忽略,而不拋出異常3

6.3. 時間格式的轉換3

6.4. Api使用json lib,以及gson的也一個3

6.5. 如果要將泛型轉換成json3

7普通的的json解析器 Jackson類庫 Google Gson JSON-lib類庫4

8Api4

8.1. toJson       xxx.fromObject(x).toString(2)4

8.2. 字元串轉成對象   T fromJson(String str, Class<T> type)  fromObject(object)4

9Teste code4

10. 參考6

 

 

 

1. V1版本---集成了多引擎

 

2. V2版本新特性 --bsh腳本化

使用了bsh腳本化防止編譯錯誤

3. V3版本新特性---迴圈引用解決使用fastjson

Fastjson版本放在第一解析器序列

 

4. prob目前jsonlib庫的存在的問題,

4.1. 可能版本衝突,拋出ex

4.2. 多個json類庫編譯需求jar ,需要同時具備多個json jar類庫才可編譯成功。。麻煩

4.3. 迴圈引用的解決

 

作者:: 綽號:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿爾 拉帕努伊 ) 漢字名:艾龍,  EMAIL:[email protected]

轉載請註明來源: http://www.cnblogs.com/attilax/

 

5. solu解決之道:

5.1. 自定義json解析庫,使用多個複合的json 解析複合的引擎

5.2. 迴圈引用暫時使用fastjson解決,最終要限制level解決

通過反射,變成map,限制層數解決

 

5.3. 腳本化,防止編譯問題的 出現

 

6. 幾個要點

6.1. 複合結構的轉換

6.2. 沒有get set方法的屬性自動忽略,而不拋出異常

6.3. 時間格式的轉換

6.4. Api使用json lib,以及gson的也一個

 作者:: 老哇的爪子 Attilax 艾龍,  EMAIL:[email protected]

轉載請註明來源: http://www.cnblogs.com/attilax/

 

6.5. 如果要將泛型轉換成json

1、如,一個Map是這樣的,Map<String, Map<String, List<String>>> map,如果這樣使用gson.toJson(map)得不到正確的結果的話,那麼,我們可能要這樣使用,gson.toJson(map,new TypeToken<Map<String, Map<String, List<String>>>>(){}.getType())

 

 

解決方案:

  1、如果涉及到關聯屬性的對象,轉換前可以先把它的關聯屬性轉換並放入一個新建的Map或者List,然後按照層次結構重覆這樣的操作一層一層的往上轉,這樣,一般可以解決問題,但是,如果關聯的層次比較深,做起來就很麻煩了。上面提到的問題3就可以用這種方式解決。

 

 

 

7. 普通的的json解析器 Jackson類庫 Google Gson JSON-lib類庫

 

 

8. Api  

8.1. toJson       xxx.fromObject(x).toString(2)

8.2. 字元串轉成對象   T fromJson(String str, Class<T> type)  fromObject(object)

 

9. Teste code

 

package com.attilax.json;

 

import java.util.Date;

import java.util.HashMap;

import java.util.Map;

 

import com.attilax.core;

import com.google.gson.Gson;

 

public class JSONObject {

 

public JSONObject(Map m) {

this.obj = m;

}

 

public static void main(String[] args) {

 

Map m = new HashMap();

m.put("d"new Date());

// m.put(key, value)

 

JSONObject.fromObject(m).toString(2);

}

 

private String toString(int i) {

 

// if(i==2) //fmt

{

try {

return net.sf.json.JSONObject.fromObject(this.obj).toString(i);

catch (Exception e) {

 

try {

// 創建一個gson對象

Gson gson = new Gson();

 

// 轉換成json

String json = gson.toJson(this.obj);

return json;

catch (Exception e2) {

return JsonUtil4jackjson.buildNormalBinder().toJson(

this.obj);

}

 

}

 

}

 

}

 

public Object obj;

 

private static JSONObject fromObject(Map m) {

// TODO Auto-generated method stub

return new JSONObject(m);

}

 

}

 

10. 參考

Atitit.序列化迴圈引用解決方案json  

 

 

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文轉載自:http://www.cnblogs.com/dolphin0520/p/3913517.html java併發編程(二):如何創建線程?(轉載) 在前面一篇文章中已經講述了在進程和線程的由來,今天就來講一下在Java中如何創建線程,讓線程去執行一個子任務。下麵先講述一下Java中的應用
  • 原文出處: 小寶鴿 一、概況 總體來說設計模式分為三大類: (1)創建型模式,共五種:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。 (2)結構型模式,共七種:適配器模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式。 (3)行為型模式,共十一種:策略模式、模板方法模式
  • <span style="font-size:18px;"><!-- Open Entity Manager in View filter--> <filter> <filter-name>openEntityManagerInViewFilter</filter-name> <filter-cla
  • 本文轉載自:http://www.cnblogs.com/dolphin0520/p/3910667.html Java併發編程(一):進程和線程之由來(轉載) 在前面,已經介紹了Java的基礎知識,現在我們來討論一點稍微難一點的問題:Java併發編程。當然,Java併發編程涉及到很多方面的內容,不
  • 第一次用centOS,感覺好高大上,安裝了差不多一個半小時,學習了挺多命令的 1、 檢查centOS中預設的python版本,一般是python2.6。 命令:python –v 2、 安裝GCC 命令:#yum install gcc gcc-c++ 3、 安裝wget網頁下載工具:為後續下載做準
  • 一開始還以為代碼寫的有問題,點擊事件裡面有比較耗時卡主線程的代碼,逐一刪減代碼發現並不是這麼回事。
  • 近階段一直在查看項目里所使用到的一些技術點,發現了gearman,於是就動手搞了下環境,下麵是來自百度百科關於gearman的介紹: Gearman是一個用來把工作委派給其他機器、分散式的調用更適合做某項工作的機器、併發的做某項工作在多個調用間做負載均衡、或用來在調用其它語言的函數的系統。 可用於...
  • atitit.TokenService token服務模塊的設計 1. Token的歸類1 2. Token的用途2 2.1. 訪問控制2 2.2. 編譯原理術語)編輯2 2.3. 數據處理2 1. Token的歸類 Token, 令牌,代表執行某些操作的權利的對象 訪問令牌(Access toke
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...