2017-04-03 97 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

相关问题