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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...