2017-04-03 32 views
2

我已經繼承了一個較大的基於Java的服務器端代碼庫,該代碼庫使用JSON與客戶端進行通信。基於以下幾個原因,基於Jackson的JSON轉換必須使用二進制格式 - 換句話說,我在服務器 一側生成的JSON由字節組成,而不是由字符組成。如何轉換Javascript中的JSON字節

這對於以前的客戶來說不是問題,因爲它們都是基於Java的。我可以使用Jackson庫將二進制文件轉換回對象。不幸的是,我被要求創建一些基於瀏覽器的客戶端,它們需要使用Javascript來接收和顯示JSON信息。

我正在嘗試使用JQuery的JSON轉換函數,但事實證明,無論是JQuery還是常規的Javascript函數都無法將一組JSON字節轉換回對象。我需要將字節轉換回字符,以便將它們轉換回對象。

我瞭解到,爲了將字節轉換爲字符,我必須將字節轉換爲字節數組。這是我遇到問題的地方。

我一直在嘗試使用各種方法將二進制JSON信息轉換回可以使用JSON轉換函數轉換爲有意義的對象的窗體(字節數組)。我已經使用ArrayBuffer以將數據轉換成一個字節的緩衝區試過,則int8Array()函數創建一個字節數組:

var buffer = new ArrayBuffer(obj.payload.length); 
var bits = new Int8Array(buffer); 

我還試圖使用uint8Array(),並試圖找到的各種其它轉換例程在互聯網上(以及Stack Overflow中),以創建可以轉換爲有意義的字符的數組。我所有的嘗試都在運行時造成錯誤和失敗,或者產生了破壞JSON轉換器的垃圾。

有什麼方法讓Javascript讀取由Jackson生成的一組字節,以便可以使用JSON轉換器將它們轉換回對象?或者,Javascript只能夠轉換JSON字符串?

有人請指教...

+1

你知道,這將有助於?這就是所謂的* JSON字節*的例子 - 這就是說我們可以排除你根本不處理JSON的可能性 –

回答

3

假設你的二進制JSON是這樣的:

[123, 34, 107, 101, 121, 34, 58, 34, 118, 97, 108, 117, 101, 34, 125]

,你可以很容易地將其轉換爲字符串:

var str = String.fromCharCode.apply(String, data);

並用JSON對象解析:

JSON.parse(str);

jsfiddle

相關問題